字典值的总和列表

sau*_*aul 7 python dictionary list python-3.x

我有一个这种形式的字典列表:

[
{'signal_8': 1, 'signal_1': 7, 'signal_10': 5, 'signal_5': 2, 'signal_2': 5, 'signal_6': 3, 'signal_4': 9, 'signal_3': 6, 'signal_9': 4, 'signal_7': 8}, 

{'signal_8': 1, 'signal_1': 7, 'signal_10': 5, 'signal_5': 2, 'signal_2': 5, 'signal_6': 3, 'signal_4': 9, 'signal_3': 6, 'signal_9': 4, 'signal_7': 8},

{'signal_8': 1, 'signal_1': 7, 'signal_10': 5, 'signal_5': 2, 'signal_2': 5, 'signal_6': 3, 'signal_4': 9, 'signal_3': 6, 'signal_9': 4, 'signal_7': 8},
]
Run Code Online (Sandbox Code Playgroud)

我想对列表中的每个元素按键求和中的值,如下所示:

    {
     'signal_8': 3,
     'signal_1': 21,
     'signal_10': 15,
     'signal_5': 6,
     'signal_2': 15,
     'signal_6': 9,
     'signal_4': 27,
     'signal_3': 18,
     'signal_9': 12,
     'signal_7': 24
    }
Run Code Online (Sandbox Code Playgroud)

我尝试过的是以下内容:

    result = {}
    sm = 0
    for elm in original_list:
        for k,v in elm.items():
            sm += v
            result[k] = sm
    print(result)
Run Code Online (Sandbox Code Playgroud)

但它仍然不起作用。

tim*_*geb 11

类似于 daveruinseverything 的答案,我会用 a 来解决这个问题Counter,但要使用它的update方法。

让我们signals成为你的字典列表。

>>> from collections import Counter
>>> c = Counter()
>>> for d in signals:
...     c.update(d)
... 
>>> c
Counter({'signal_4': 27, 'signal_7': 24, 'signal_1': 21, 'signal_3': 18, 'signal_10': 15, 'signal_2': 15, 'signal_9': 12, 'signal_6': 9, 'signal_5': 6, 'signal_8': 3})
Run Code Online (Sandbox Code Playgroud)

看在 Op 的份上,您能否简要描述一下这里发生的事情?

A 的Counter工作原理类似于 a dict,但它的update方法将值添加到预先存在的键的值中,而不是覆盖它们。


dav*_*ing 2

你想要的是Counter集合类型。关于集合的Python 文档对其进行了最好的描述,但本质上 aCounter是一种特殊类型的字典,其中所有值都是整数。您可以传递任何密钥(包括不存在的密钥)并将其添加到其中。例如:

from collections import Counter

original_list = [
    {'signal_8': 1, 'signal_1': 7, 'signal_10': 5, 'signal_5': 2, 'signal_2': 5, 'signal_6': 3, 'signal_4': 9, 'signal_3': 6, 'signal_9': 4, 'signal_7': 8}, 
    {'signal_8': 1, 'signal_1': 7, 'signal_10': 5, 'signal_5': 2, 'signal_2': 5, 'signal_6': 3, 'signal_4': 9, 'signal_3': 6, 'signal_9': 4, 'signal_7': 8},
    {'signal_8': 1, 'signal_1': 7, 'signal_10': 5, 'signal_5': 2, 'signal_2': 5, 'signal_6': 3, 'signal_4': 9, 'signal_3': 6, 'signal_9': 4, 'signal_7': 8},
]

result = Counter()

for elem in original_list:
    for key, value in elem.items():
        result[key] += value

print(result)
Run Code Online (Sandbox Code Playgroud)

update()编辑:@timgeb 提供了这个答案的变体,它在对象上本地使用该方法Counter。我建议将其作为此处的最佳答案