如何一次性合并多个字典并对重复键的值求和?
合并多个字典并对重复键值求和的简洁写法
你需要合并任意数量的字典(甚至是来自生成器的字典),规则是重复键对应的值求和,唯一键保留原值。比如:
a = {"a": 1, "b": 2, "c": 3} b = {"c": 1, "d": 1} c = {"a": 2, "b": 2}
合并后要得到:{"a": 3, "b": 4, "c": 4, "d": 1}
之前用sum(Counter(d) for d in (a,b,c))报错,是因为sum默认初始值是0,而int和Counter类型不能直接做加法。
给你一行简洁的解决写法,只需要给sum指定初始值为Counter()即可:
from collections import Counter # 处理多个字典(生成器也适用) result = dict(sum((Counter(d) for d in (a, b, c)), Counter())) print(result)
原理很简单:sum的第二个参数是累加的初始值,指定为空Counter()后,就会从这个空计数器开始,依次把每个字典转成的Counter对象累加起来,最后转成普通字典就能得到想要的结果。如果你的字典来自生成器,直接把(a,b,c)换成生成器表达式就行,不需要提前把所有字典加载到内存,适合处理大量字典的场景。
内容的提问来源于stack exchange,提问作者LoicM
相关产品推荐
相关产品推荐

