【问题标题】:Assigning Values to a Nested Dictionary Error为嵌套字典错误赋值
【发布时间】:2019-11-26 13:02:06
【问题描述】:

我收到的数据包含时间戳,以及 Open、High、Low 和 Close 值。

我试图在字典中组织它,以便在每个时间戳都有一个键,其中包含相应的 Open、High、Low 和 Close 值。

到目前为止我做了什么:

我首先初始化了一个名为 newest_bar 的空字典。

然后,每次添加新柱时,我首先设置一个名为 'Timestamp' 的新键,其中将包含该新柱的时间。然后从那里运行for 循环,以在该时间戳下嵌套相应的打开、高、低和关闭值。

这是我的尝试:

def append(self, bar):
    key = ['Open', 'High', 'Low', 'Close']
    values = [bar.Open, bar.High, bar.Low, bar.Close]
    self.newest_bar['TimeStamp'] = bar.Timestamp
    for i, item in enumerate(key):
        self.newest_bar['TimeStamp'][item] = values[i]

    print(self.newest_bar)

但是我不断收到这个错误,这告诉我我很可能没有正确分配密钥。

TypeError: 'pywintypes.datetime' 对象不支持项目分配

数据示例:

Timestamp: 2019-07-17 10:58:00+00:00
Open: 1.8877
High: 1.8878
Low: 1.8871
Close: 1.8878

输出示例

{'TimeStamp': '2019-07-17 10:58:00+00:00' 
        {'Open":1.8877, 'High':1.8878, 'Low':1.8871, 'Close':1.8878}

【问题讨论】:

  • 如果可能,展示您希望newest_bar 的外观。我的意思是,显示变量newest_bar 的示例数据。你需要可视化你的数据应该是什么样子,然后根据它设计代码来制作所需的数据结构。
  • @DiptangsuGoswami 完成
  • 我不知道该输出应该是什么意思。您打算如何将字典和时间戳分配给同一个键?你的意思是只有一本平面字典吗?
  • 我正在尝试使用嵌套字典,以便每个时间戳都包含 4 个具有打开、高、低和关闭值的键,这样如果我想引用 2019-07- 的打开17 10:55 酒吧我可以做到@MadPhysicist
  • 那你就倒过来了。时间戳本身应该是关键,而不是“时间戳”这个词。我会发布一个答案。

标签: python pandas dictionary nested


【解决方案1】:

从名称来看,例如appendnewest_bar,您正试图将条形信息放入以时间戳为键的字典中。没有理由使用名为Timestamp 的键:对柱信息的访问由时间戳本身提供。因此,您可能想要维护一个字典,我们在self 中将其称为bars。为方便起见,您可能希望获得时间戳信息的唯一位置是 self.newest_bar,以便让用户知道您上次更新的时间。这样,在每个栏的键中包含 Timestamp 并没有什么坏处:

bar_keys = ['Timestamp', 'Open', 'High', 'Low', 'Cloe']

...

def append(self, bar):
    self.newest_bar = {key: getattr(bar, key) for key in bar_keys}
    self.bars[self.newest_bar['Timestamp']] = self.newest_bar

您可以使用getattrcomprehension 一步制作字典,而不是解包到列表然后再循环重新打包。我还建议提取类主体的键列表,否则每次调用函数时它都会创建一个新列表。

【讨论】:

  • 所以我有点困惑。你是对的,我基本上只是想将任何最新的酒吧信息添加到我的字典中。我自己有一个 latest_bar。我不知道你为什么要我添加另一个名为 bar 的字典?
  • 我已经做到了,并为自己添加了条形图。但我仍然收到此错误:self.bars[newest_bar['Timestamp']] = self.newest_bar NameError: name 'newest_bar' is not defined。我在 append 函数中有 bar_keys=key 代码行。这会导致问题吗?
  • @novawaly。将bar_keys 添加回您的函数应该不是问题。我假设您想让newest_bar 仅指向单个最新柱,而bars 是您处理的所有时间到其相应柱数据的映射。每次在我们的代码中调用 append 时,newest_bar 都会被覆盖。
  • 我需要自我吗?在 latest_bar['Timestamp'] 前面?
  • 嗯,好的。我明白你想做什么。所以在最后一行代码中,我不需要在某处给它实际的时间戳而不是 TimeStamp 这个词吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 2017-08-12
  • 2019-05-14
  • 1970-01-01
  • 2014-06-02
  • 2021-09-20
  • 1970-01-01
相关资源
最近更新 更多