在包含字典和返回字典的列表上操作

时间:2013-04-23 19:47:02

标签: python-2.7

我有一个元素列表,其中每个元素都是一种字典。我希望这个实现在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}

3 个答案:

答案 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中的每个密钥对,因为密钥将需要将这样的密钥添加到最终的词典中。