【问题标题】:Python: add column to dictionary but not map in correct orderPython:将列添加到字典但未按正确顺序映射
【发布时间】:2017-01-11 13:52:34
【问题描述】:

我正在添加从 Flask sqlalchemy 核心查询的数据。缺少所有数据的列。所以我用下面的代码添加回来:有很多列,但我只是简化为一些。

col = ['index','Stock','Name','MACD','STOCH','RSI']
a = call.fetchall()
print a
>>>a=[(0, 'MAGNUM', 'MAGNUM BERHAD', 'SS', 'S', 'H1'),(1,'ABC','ABC BH','SS','S','H2')]. 
dicts = [dict(zip(col, d)) for d in a]
print dicts
>>>[{'MACD': 'JAC', 'RSI': 'SS', 'STOCH': 'SB', 'Name': 'H',Stock':'H'}]

dicts 输出跳过第一个结果,即索引 0。它转到索引 1。此外,索引没有映射到 dicts。 如何让它以正确的顺序映射所有内容?

【问题讨论】:

  • 字典无法保持顺序。
  • 你的意思是[dict(a,b) for a,b in zip(col,d)]
  • 可以实际上只是做data = [dict(row) for row in a],但为什么还要这样做呢?你可以传递a 并执行row.Stock 之类的操作。
  • @WayneWerner,你能进一步解释一下吗?

标签: python dictionary


【解决方案1】:

您不能预先假定字典中的顺序。

既然你改变了你的问题,我就改变了我的答案。 a 是一个元组列表,因此可以使用以下方法:

from collections import OrderedDict
col = ['index','Stock','Name','MACD','STOCH','RSI']
a=[(0, 'MAGNUM', 'MAGNUM BERHAD', 'SS', 'S', 'H1'),(1,'ABC','ABC BH','SS','S','H2')]

d = [OrderedDict(zip(col,t)) for t in a]

print (d)

它创建了一个包含 OrderedDict 元素的列表推导式,该元素通过将 col 列表与 a 元组列表的每个元素进行压缩来构建。

结果:

[OrderedDict([('index', 0), ('Stock', 'MAGNUM'), ('Name', 'MAGNUM BERHAD'), ('MACD', 'SS'), ('STOCH', 'S'), ('RSI', 'H1')]), OrderedDict([('index', 1), ('Stock', 'ABC'), ('Name', 'ABC BH'), ('MACD', 'SS'), ('STOCH', 'S'), ('RSI', 'H2')])]

【讨论】:

  • 它不起作用。 a=[(0, 'MAGNUM', 'MAGNUM BERHAD', 'SS', 'S', 'H1'),(1,'ABC','ABC BH','SS','S','H2')]。很抱歉造成混乱。我得到的输出是OrderedDict([('index', 0,'MAGNUM','MAGNUM BERHARD','SS'), ('Stock', 'ABC','ABC BH','SS')])
  • 好的,你后来更改了数据。现在你的代码很有意义。请参阅我的更新答案。变化不大。
  • @DanielLee 问题已经改变。也许是时候取消删除您的帖子了,因为它现在回答了问题:)
猜你喜欢
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
  • 2021-08-08
  • 1970-01-01
  • 2016-08-31
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
相关资源
最近更新 更多