![](/img/trans.png)
[英]How to sum elements in list of dictionaries if two key values are the same
[英]How to sum the values assigned to a key in a list of dictionaries?
我有如下字典列表:
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)
。
从此开始-
A = [{1 : 5, 2 : 3, 3 : 4}, {1 : 1, 5: 10, 3: 2}, {100 : 2}]
这是使用collections.Counter
数据结构来获取所需内容的一种方法-
map
将每个字典转换为Counter
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
s的Counter
在于,您可以将它们很好地相加。 sum
的第二个参数是“ sum”的开头。 如果要返回字典(而不是Counter
),请致电dict(r)
。
请注意,当您的字典仅具有带数字值的键时,此解决方案有效。
您也可以使用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})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.