![](/img/trans.png)
[英]How do I convert a list of dictionaries to a dictionary of lists in 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.