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方法将值添加到预先存在的键的值中,而不是覆盖它们。
你想要的是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。我建议将其作为此处的最佳答案