我有一个元素列表,其中每个元素都是一种字典。我希望这个实现在Python中完成。
我的输入是这样的:
MyList = [{'Kathy':1, 'Bob':1, 'Spencer':1}, {'Kathy':4, 'Cynthia':2, 'Bob':3, 'Goldman':1}, {'Spencer':2, 'Bob':1}]
我的输出应该是这样的:
MyDict = {'Kathy':5, 'Bob':5, 'Spencer':3, 'Cynthia':2, 'Goldman':1}
答案 0 :(得分:2)
使用Counter:
>>> from collections import Counter
>>> myList = [{'Kathy':1, 'Bob':1, 'Spencer':1}, {'Kathy':4, 'Cynthia':2, 'Bob':3, 'Goldman':1}, {'Spencer':2, 'Bob':1}]
>>> myDict = Counter()
>>> for d in myList:
myDict.update(d)
>>> myDict
Counter({'Kathy': 5, 'Bob': 5, 'Spencer': 3, 'Cynthia': 2, 'Goldman': 1})
答案 1 :(得分:0)
这是使用defaultdict执行此操作的一种方法。
import collections
MyDict = collections.defaultdict(int)
for d in MyList:
for k,v in d.items():
MyDict[k] += v
MyDict = dict(MyDict) #if you want a normal dict
编辑:看起来计数器版本更好。但是,如果您必须执行除添加注入之外的其他操作,了解默认情况仍然很重要。例如,它们可用于累积列表或集合。
答案 2 :(得分:-1)
这是另一种做到这一点的方式,在我看来比目前为止提供的替代方案更加pythonic(但它更可能使用更多内存,因为它不是基于生成器):
my_dict = {key: 0
for one_dict in list_of_dicts
for key in one_dict.keys()}
my_dict = {key: one_dict[key]+my_dict[key]
for one_dict in list_of_dicts
for key in one_dict.keys()}
编辑:感谢@ShadowRanger的洞察力,但是,在这种情况下,我宁愿使用.keys()选项来专门恢复密钥,而不是简单地遍历dict中的每个密钥对,因为密钥将需要将这样的密钥添加到最终的词典中。