繁体   English   中英

如何将字典中的列表转换为列表中的字典(Python)

[英]How to convert lists in a dictionary to dictionaries in a lists (Python)

我的词典中有多个列表:

stock = {
  'code': ['1942', '1942', '1942', '1942'], 
  'high': [782, 771, 764, 765],
  'date': ['2015-07-15', '2015-07-14', '2015-07-13',  '2015-07-10',],
  'close': [780, 768, 763, 753],
  'open': [767, 770, 756, 762]
}

我想将这些列表转换为列表中的字典:

converted = [
  {'code': '1942', 'high': 782, 'date': '2015-07-15', 'close': 780, 'open': 767},
  {'code': '1942', 'high': 771, 'date': '2015-07-14', 'close': 768, 'open': 770},
  {'code': '1942', 'high': 764, 'date': '2015-07-13', 'close': 763, 'open': 756},
  {'code': '1942', 'high': 765, 'date': '2015-07-12', 'close': 753, 'open': 762},
]

最终目标是使用字典输出csv文件,但我被困在这里。 我不确定如何获得结果。 如果您能给我一些建议,那就太好了。 谢谢!

只需使用zip和地图:

converted = map(lambda b: dict(zip(stock.keys(),b)), zip(*stock.values()))

您可以使用zip()函数 转置字典值 ,将它们与键配对zip()再次使用zip() )以创建新字典:

cols = zip(*stock.values())
converted = [dict(zip(stock, column)) for column in cols]

或者,合并为一行:

converted = [dict(zip(stock, column)) for column in zip(*stock.values())]

演示:

>>> stock = {
...   'code': ['1942', '1942', '1942', '1942'], 
...   'high': [782, 771, 764, 765],
...   'date': ['2015-07-15', '2015-07-14', '2015-07-13',  '2015-07-10',],
...   'close': [780, 768, 763, 753],
...   'open': [767, 770, 756, 762]
... }
>>> [dict(zip(stock, column)) for column in zip(*stock.values())]
[{'close': 780, 'date': '2015-07-15', 'high': 782, 'code': '1942', 'open': 767}, {'close': 768, 'date': '2015-07-14', 'high': 771, 'code': '1942', 'open': 770}, {'close': 763, 'date': '2015-07-13', 'high': 764, 'code': '1942', 'open': 756}, {'close': 753, 'date': '2015-07-10', 'high': 765, 'code': '1942', 'open': 762}]
>>> from pprint import pprint
>>> pprint(_, compact=True)
[{'close': 780, 'code': '1942', 'date': '2015-07-15', 'high': 782, 'open': 767},
 {'close': 768, 'code': '1942', 'date': '2015-07-14', 'high': 771, 'open': 770},
 {'close': 763, 'code': '1942', 'date': '2015-07-13', 'high': 764, 'open': 756},
 {'close': 753, 'code': '1942', 'date': '2015-07-10', 'high': 765, 'open': 762}]

您可以使用zip

converted = [dict(x) for x in zip(*[[(k, tv) for tv in v] for k, v in stock.iteritems()])]

这样的事情可能会有所帮助?

stock ={
    'code': ['1942', '1942', '1942', '1942'],
    'high': [782, 771, 764, 765],
    'date': ['2015-07-15', '2015-07-14', '2015-07-13',  '2015-07-10'],
    'close': [780, 768, 763, 753],
    'open': [767, 770, 756, 762]
}
new_list = []
min_length = min([len(stock[prop]) for prop in stock])

for x in range(min_length):
    new_prop = {}
    for prop in stock:
        new_prop[prop] = stock[prop][x]
    new_list.append(new_prop)

print new_list

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM