繁体   English   中英

如何对分配给字典列表中的键的值求和?

[英]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数据结构来获取所需内容的一种方法-

  1. 使用map将每个字典转换为Counter
  2. 将每个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM