寻找一种更 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 的方式将一个充满字典的列表合并为一个?的主要内容,如果未能解决你的问题,请参考以下文章

Python - 寻找一种更有效的方法来重新编写字典中的键

Pythonic方式将格式应用于字典中没有f字符串的所有字符串

将 CSV 值读入列表字典的大多数 Pythonic 方式

寻找一种更有效(和可移植)的方式在 unix 中获取(数字)文件权限

pythonic方式在没有索引变量的情况下做N次?

“查询”字典的 Pythonic 方式