【问题标题】:Looking for a more pythonic way to merge a list full of dictionaries into one?寻找一种更 Pythonic 的方式将一个充满字典的列表合并为一个?
【发布时间】: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))

任何指导将不胜感激...谢谢

【问题讨论】:

标签: python json list dictionary list-comprehension


【解决方案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}
    

    【讨论】:

    • 是的,做到了。谢谢
    猜你喜欢
    • 1970-01-01
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    相关资源
    最近更新 更多