将值分配给嵌套字典错误

时间:2019-07-17 16:08:27

标签: python pandas dictionary nested

我收到的数据中包含一个时间戳,以及“打开”,“高”,“低”和“关闭”值。

我正在尝试将其组织成字典,以便在每个时间戳记中都有一个键,用于保存对应的Open,High,Low和Close值。

到目前为止我所做的:

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

然后,每次添加新栏时,我首先设置一个名为'Timestamp'的新键,其中将包含该新栏的时间。然后从那里运行for循环,以在该时间戳下嵌套相应的Open,High,Low和close值。

这是我的尝试:

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}

1 个答案:

答案 0 :(得分:1)

appendnewest_bar之类的名称来看,您试图将栏信息放入以时间戳为键的字典中。没有理由使用名为Timestamp的键:时间戳本身提供对条信息的访问。因此,您可能需要维护一个字典,在bars中将其称为self。为了方便起见,唯一可能需要时间戳信息的地方是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一步一步创建字典,而不是解压缩到列表中然后再用循环重新打包。我还建议提取类主体的键列表,否则每次调用该函数都会创建一个新列表。

相关问题