字典理解语法理解

时间:2019-07-17 18:05:37

标签: python pandas list dictionary list-comprehension

我在这里与某人合作,通过使用列表推导填充字典来帮助我解决问题。我有一个称为bar的输出,其中包含开盘高低和收盘数据,我只想将它们分配给字典。 数据示例:

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

我们通过以下代码做到了这一点:

def append(self, bar):
    symbols = symbol = ['CLE', 'RBE']
    bar_keys = key = ['Open', 'High', 'Low', 'Close']
    self.newest_bar = {key: getattr(bar, key) for key in bar_keys}

因此,它将基本上获取bar_keys列表中的每个值的bar.Open,bar.Close等。

我本质上是在尝试在第二个符号的上方添加一个并尝试使用相同的确切语法,但是我不确定为什么它不起作用。

我现在只想取下bar.Close每个符号(CLE,RBE)的值并将其添加到我的字典中,但是我一直在获取不可散列的类型。上面的工作版本与下面的我的版本有什么区别?

symbols = symbol = ['CLE', 'RBE']
self.closes = {key: getattr(bar, 'Close') for symbol in symbols}

这是他的工作版本以及我所添加的内容的完整代码段:

def append(self, bar):
    symbols = symbol = ['CLE', 'RBE']
    bar_keys = key = ['Open', 'High', 'Low', 'Close']
    self.newest_bar = {key: getattr(bar, key) for key in bar_keys}
    self.bars[bar.Timestamp] = self.newest_bar
    self.closes = {key: getattr(bar, 'Close') for symbol in symbols}

1 个答案:

答案 0 :(得分:2)

key是一个列表。您无法使用列表来键入字典。在其他代码中,改用dict理解中的key

对于一堆不同的东西,请停止使用相同的变量名。

def append(self, bar):
    symbols = ['CLE', 'RBE']
    bar_keys = ['Open', 'High', 'Low', 'Close']
    self.newest_bar = {key: getattr(bar, key) for key in bar_keys}
    self.bars[bar.Timestamp] = self.newest_bar
    self.closes = {symbol: getattr(bar, 'Close') for symbol in symbols}