如何将字典列表组合到一个字典中

时间:2015-07-31 11:32:41

标签: python dictionary

我有一个dicts列表:

d =[{'a': 4}, {'b': 20}, {'c': 5}, {'d': 3}]

我想删除花括号并将d转换为单个dict,如下所示:

d ={'a': 4, 'b': 20, 'c': 5, 'd': 3}

4 个答案:

答案 0 :(得分:4)

如果您不介意更换早期按键的重复按键,可以使用:

from functools import reduce  # Python 3 compatibility 
d = reduce(lambda a, b: dict(a, **b), d)

这会合并前两个词典,然后将每个后续词典合并到目前为止构建的结果中。

演示:

>>> d =[{'a': 4}, {'b': 20}, {'c': 5}, {'d': 3}]
>>> reduce(lambda a, b: dict(a, **b), d)
{'a': 4, 'c': 5, 'b': 20, 'd': 3}

答案 1 :(得分:3)

您只需迭代d并将元素追加到update())新的字典,例如newD

d =[{'a': 4}, {'b': 20}, {'c': 5}, {'d': 3}]

newD = {}
for entry in d:
    newD.update(entry)

>>> newD
{'c': 5, 'b': 20, 'a': 4, 'd': 3}

注意:如果d中存在重复值,则最后一个值将显示在newD中。

答案 2 :(得分:1)

覆盖现有密钥的值,一个残酷且缺乏经验的解决方案

nd = {}
for el in d:
    for k,v in el.items():
    nd[k] = v

或写成字典理解:

d = {k:v for el in d for k,v in el.items()}

答案 3 :(得分:0)

a = [{'a': 4}, {'b': 20}, {'c': 5}, {'d': 3}]
b = {}
[b.update(c) for c in a]

b = {'a': 4, 'b': 20, 'c': 5, 'd': 3}

如果订单很重要:

from collections import OrderedDict
a = [{'a': 4}, {'b': 20}, {'c': 5}, {'d': 3}]
newD = OrderedDict()
[newD.update(c) for c in a]
out = dict(newD)