我收到的数据中包含一个时间戳,以及“打开”,“高”,“低”和“关闭”值。
我正在尝试将其组织成字典,以便在每个时间戳记中都有一个键,用于保存对应的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}
答案 0 :(得分:1)
从append
和newest_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
您可以使用getattr
和comprehension一步一步创建字典,而不是解压缩到列表中然后再用循环重新打包。我还建议提取类主体的键列表,否则每次调用该函数都会创建一个新列表。