如何对字典元素求和
在Python中,
我有一个字典的列表:
dict1 = [{'a':2, 'b':3},{'a':3, 'b':4}]
我想要一个最终的字典,这个字典会包含所有字典的总和。
也就是说,结果会是:{'a':5, 'b':7}
注意:列表中的每个字典都会包含相同数量的键值对。
11 个回答
13
使用 sum()
函数在合并多个字典时,性能会更好,特别是当字典数量超过几个的时候。
>>> dict1 = [{'a':2, 'b':3},{'a':3, 'b':4}]
>>> from operator import itemgetter
>>> {k:sum(map(itemgetter(k), dict1)) for k in dict1[0]} # Python2.7+
{'a': 5, 'b': 7}
>>> dict((k,sum(map(itemgetter(k), dict1))) for k in dict1[0]) # Python2.6
{'a': 5, 'b': 7}
这里加上Stephan的建议。
>>> {k: sum(d[k] for d in dict1) for k in dict1[0]} # Python2.7+
{'a': 5, 'b': 7}
>>> dict((k, sum(d[k] for d in dict1)) for k in dict1[0]) # Python2.6
{'a': 5, 'b': 7}
我觉得Stephan的Python2.7代码写得非常好。
61
你可以使用 collections.Counter 这个工具。
counter = collections.Counter()
for d in dict1:
counter.update(d)
或者,如果你喜欢用一行代码来写:
functools.reduce(operator.add, map(collections.Counter, dict1))
18
虽然有点丑,但这是一行代码:
dictf = reduce(lambda x, y: dict((k, v + y[k]) for k, v in x.iteritems()), dict1)