【问题标题】:Dictionary Comprehension Syntax Understanding字典理解语法理解
【发布时间】:2019-11-26 15:25:04
【问题描述】:

我在这里与某人合作,他通过使用列表压缩来填充字典来帮助我解决问题。我有一个名为 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}

这是完整的代码 sn-p 以及他的工作版本和我添加的内容:

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}

【问题讨论】:

  • Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确说明问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您指定的问题。
  • 那不是列表推导,那是字典推导。
  • 你为什么还要symbols = symbol = bar_keys = key = ?而且,在第一个代码中,您甚至没有使用 symbols...

标签: python pandas list dictionary list-comprehension


【解决方案1】:

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}

【讨论】:

  • ohh - 我认为工作示例中的“键”是定义字典键所必需的。
  • 在工作示例中,key 通过 dict 理解设置了来自 bar_keys 的单个对象。如果您想在新代码中再次使用这些键值,则必须使用循环或推导式遍历 bar_keys
猜你喜欢
  • 1970-01-01
  • 2016-09-03
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
  • 2013-01-08
  • 2015-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多