我有一个dicts列表:
d =[{'a': 4}, {'b': 20}, {'c': 5}, {'d': 3}]
我想删除花括号并将d
转换为单个dict,如下所示:
d ={'a': 4, 'b': 20, 'c': 5, 'd': 3}
答案 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)