python - 将值分配给嵌套字典错误

标签 python pandas dictionary nested

我收到的数据包含时间戳以及开盘价、最高价、最低价和收盘价。

我试图将其组织在字典中,以便在每个时间戳处,都有一个键保存相应的开盘价、最高价、最低价和收盘价。

到目前为止我做了什么:

我首先初始化一个名为 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' object does not support item assignment

数据示例:

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}

最佳答案

从名称来看,例如 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

您可以使用getattr和一个comprehension一步创建一个字典,而不是解包到一个列表,然后用循环重新打包。我还建议将键列表提取到类主体中,否则每次调用该函数时都会生成一个新列表。

关于python - 将值分配给嵌套字典错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57080180/

相关文章:

java - 如何识别 Java 中文本文档的语言?

Python:创建一个新字典,从嵌套列表的字典中获取值

python - Odoo 如何隐藏基于用户组的编辑按钮?

python - "print"重定向到另一个应用程序时不起作用

python - 对于给定的 pandas 列,是否有一种更快的方法来检查数据条目的符号是否与前一行中数据条目的符号不同?

python - 如何在 mutate dplython 中使用正则表达式添加新列

Java 2D 游戏图 block 渲染优化

Python 多处理似乎几乎不可能在类内完成/使用任何类实例。它的预期用途是什么?

python - Django 错误 : io. UnsupportedOperation: read and ValueError: bad mode 'rb'

python - 如何使用 python 更改此数据框以使用协同过滤