我有以下词典列表:
A=[
{key1 : val11, key2 : val21, key3 : val31, key5 : val51, key6 : val61},
{key2 : val22, key3 : val32, key5 : val52, key6 : val62},
{key1 : val13, key2 : val23, key4 : val43, key5 : val53},
{key1 : val14, key3 : val34, key4 : val44, key5 : val54, key6 : val64},
{key4 : val45, key5 : val55, key6 : val65}
]
如您所见,字典的长度不同,每个字典中的key : value
也不一定相似。我想知道如何在所有词典中为每个键分配的值总和:
例如key4: (val43 + val44 + val45)
或key3: (val31 + val32 + val34)
。
答案 0 :(得分:3)
从此开始 -
A = [{1 : 5, 2 : 3, 3 : 4}, {1 : 1, 5: 10, 3: 2}, {100 : 2}]
以下是使用collections.Counter
数据结构
Counter
map
Counter
sum
对象求和
醇>
from collections import Counter
r = sum(map(Counter, A), Counter())
r
Counter({1: 6, 2: 3, 3: 6, 5: 10, 100: 2})
关于Counter
的好处是你可以很好地添加它们。 sum
的第二个参数是“和”的开头。如果您想要返回字典(而不是Counter
),请拨打dict(r)
。
请注意,当您的dicts只包含带有数值的键时,此解决方案才有效。
答案 1 :(得分:2)
您也可以使用collections.defaultdict
来获取与每个键对应的所有值的计数。您需要做的就是迭代每个元素并将值汇总到defaultdict
。例如:
my_list = [
{'key1': 2, 'key2': 7},
{'key2': 6, 'key3': 8},
{'key1': 7, 'key4':9}
]
from collections import defaultdict
my_counter = defaultdict(int)
for my_dict in my_list: # iterate your `list`
for key, value in my_dict.items(): # iterate "key", "value" pairs of your `dict`
my_counter[key] += value # sum the "value" and add to the dict
这会将dict
作为:
>>> my_counter
defaultdict(<type 'int'>, {'key3': 8, 'key2': 13, 'key1': 9, 'key4': 9})