寻找一种更 Pythonic 的方式将一个充满字典的列表合并为一个?
Posted
技术标签:
【中文标题】寻找一种更 Pythonic 的方式将一个充满字典的列表合并为一个?【英文标题】:Looking for a more pythonic way to merge a list full of dictionaries into one? 【发布时间】:2020-07-05 14:08:59 【问题描述】:我有一个包含一堆字典的列表,我试图将它们组合成一个
看起来像这样……
['name':'name', 'value':'john', 'name':'sex', 'value':'male', 'name':'color', 'value':'blue', 'name':'car', 'value':'toyota', 'name':'job', 'value':'cashier']
我正在尝试将它们全部组合到一个字典中,以便名称值是键,值是值。现在我正在做这样的事情并且效果很好,但我知道有一种更简单的方法
keys = []
vals = []
for item in a:
if item['name']:
keys.append(item['name'])
if item['value']:
vals.append(item['value'])
md = dict(zip(keys,vals))
任何指导将不胜感激...谢谢
【问题讨论】:
或许你可以看看***.com/questions/1781571/… 这能回答你的问题吗? How do I merge two dictionaries in a single expression? 【参考方案1】:你也可以这样做。
input_dict_list = ['name':'name', 'value':'john', 'name':'sex', 'value':'male', 'name':'color', 'value':'blue', 'name':'car', 'value':'toyota', 'name':'job', 'value':'cashier']
out_put_dict =
for input_dict in input_dict_list:
out_put_dict[input_dict['name']] = input_dict['value']
print(out_put_dict)
【讨论】:
【参考方案2】:您可以针对您的具体情况直接使用dict.values()
,因为键和值是按顺序提供的:
dict(d.values() for d in a)
【讨论】:
假设所有字典的名称和值条目的顺序都正确【参考方案3】:假设你的字典列表被称为 dict_list 你可以使用如下的字典理解:
new_dict = dict['name'] : dict['value'] for dict in dict_list
【讨论】:
在这种情况下,使用内置类的名称作为变量名(dict)是个坏主意,但这并不重要,但这是一个坏习惯 好评论,我只是想让理解中的每一步都试图做什么对象非常明显(容易与抽象命名的临时变量混淆)【参考方案4】:您可以使用字典推导。
new = i['name']:i['value'] for i in a
【讨论】:
是的,做到了。谢谢以上是关于寻找一种更 Pythonic 的方式将一个充满字典的列表合并为一个?的主要内容,如果未能解决你的问题,请参考以下文章
Pythonic方式将格式应用于字典中没有f字符串的所有字符串