0

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

3 回答 3

2

使用计数器

>>> 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})
于 2013-04-23T19:52:21.237 回答
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

编辑:看起来 Counter 版本更好。但是了解 defaultdicts 仍然很重要,以防你不得不做一些除了添加整数之外的事情。例如,它们对于累积列表或集合很有用。

于 2013-04-23T19:53:17.037 回答
-1

这是执行此操作的另一种方式,在我看来,这比目前提供的替代方案更具 Python 风格(但它更有可能使用更多内存,因为它不是基于生成器):

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() 选项专门恢复密钥,而不是简单地遍历字典中的每个密钥对,因为需要密钥将此类键添加到最终字典中。

于 2016-01-28T12:55:12.110 回答