这是我的词典列表:
dict_list=[{'red':3, 'orange':4}, {'blue':1, 'red':2},
{'brown':4, 'orange':7}, {'blue':4, 'pink':10}]
这是我的desired outcome
[{'red':5, 'orange':11, 'blue':5, 'brown':4, 'pink':10}]
我尝试使用sum但收到错误消息,此处更新似乎不合适。
update_dict={}
for x in dict_list:
for a in x.items():
update_dict+= x[a]
有什么建议吗?感谢。
答案 0 :(得分:3)
defaultdict
是你的朋友。
from collections import defaultdict
d = defaultdict(int)
for subdict in dict_list:
for k,v in subdict.items():
d[k] += int(v)
Python 3语法。 int(v)
是必需的,因为您的词典中包含混合字符串和整数值。
要获得所需的输出:
d
Out[16]: defaultdict(<class 'int'>, {'orange': 11, 'blue': 5, 'pink': 10, 'red': 5, 'brown': 4})
[dict(d)]
Out[17]: [{'blue': 5, 'brown': 4, 'orange': 11, 'pink': 10, 'red': 5}]
答案 1 :(得分:0)
让我们通过将dict_list
转换为元组列表来简化这一点。 itertools.chain
擅长此类事情。
from itertools import chain
dict_list=[{'red':'3', 'orange':4}, {'blue':'1', 'red':2},
{'brown':'4', 'orange':7}, {'blue':'4', 'pink':10}]
def dict_sum_maintain_types(dl):
pairs = list(chain.from_iterable(i.items() for i in dl))
# Initialize the result dict.
result = dict.fromkeys(chain(*dl), 0)
# Sum the values as integers.
for k, v in pairs:
result[k] += int(v)
# Use the type of the original values as a function to cast the new values
# back to their original type.
return [dict((k, type(dict(pairs)[k])(v)) for k, v in result.items())]
>>> dict_sum_maintain_types(dict_list)
[{'orange': 11, 'blue': '5', 'pink': 10, 'red': 5, 'brown': '4'}]