Python 如何合并dict列表,对重复键的值求和
在这个字典列表中,我想总结匹配键的Python 如何合并dict列表,对重复键的值求和,python,Python,在这个字典列表中,我想总结匹配键的值,以便输出如下所示: dict_x = [{(1, 2): 100}, {(1, 3): 150}, {(1, 3): 150, (3, 4): 150}, {(4, 5): 10, (1, 3): 10, (3, 4): 10}, {(5, 6): 15}] output:{(1, 2): 100, (1, 3): 310, (3, 4): 160, (4, 5): 10, (5, 6): 15} 我阅读了一些页面,比如,虽然它们计算匹配元素的出现次数
值
,以便输出如下所示:
dict_x = [{(1, 2): 100}, {(1, 3): 150}, {(1, 3): 150, (3, 4): 150}, {(4, 5): 10, (1, 3): 10, (3, 4): 10}, {(5, 6): 15}]
output:{(1, 2): 100, (1, 3): 310, (3, 4): 160, (4, 5): 10, (5, 6): 15}
我阅读了一些页面,比如,虽然它们计算匹配元素的出现次数,但它们并没有对匹配元素进行多次求和。感谢您抽出宝贵的时间。以下是一种一次性完成的方法:
以前的答复: 也许不是最有效的方法,但对于一个小列表,您可以通过两个步骤来完成:
>>> keys = [k for d in dict_x for k in d]
>>> {k: sum(d.get(k, 0) for d in dict_x) for k in keys}
{(1, 2): 100, (1, 3): 310, (3, 4): 160, (4, 5): 10, (5, 6): 15}
第一行获取所有键,第二行对结果求和。我几乎肯定有一些更聪明的方法可以使用python内置实现这一点。。。我会考虑的。这里有一个可能的解决方案(foo可以进一步优化):
out_dict = {}
for a in dict_x:
for b in a.keys():
out_dict[b] = out_dict.get(b, 0) + a[b]
print out_dict
输出:
Input: [{(1, 2): 100}, {(1, 3): 150}, {(1, 3): 150, (3, 4): 150}, {(4, 5): 10, (1, 3): 10, (3, 4): 10}, {(5, 6): 15}]
Output: {(1, 2): 100, (4, 5): 10, (5, 6): 15, (1, 3): 310, (3, 4): 160}
dict_x的定义不起作用:它是一个字典列表,但最后一个元素-
(5,6):15
-不是字典。如果最后一个元素是{(5,6):15}
,我会在a.iteritems()中使用表示b,v:
,避免额外查找a[b]
。谢谢。特别是对于高效版本,因为它将用于更大的列表,我非常喜欢计数器解决方案!这是一个伟大的使用算术,一个人可以做的计数器和许多人忽视。
dict_x = [{(1, 2): 100}, {(1, 3): 150}, {(1, 3): 150, (3, 4): 150}, {(4, 5): 10, (1, 3): 10, (3, 4): 10}, {(5, 6): 15}]
new_dict_x = {}
def foo(x):
global new_dict_x
for item in x.keys():
new_dict_x[item] = new_dict_x.get(item, 0) + x[item]
list(map(lambda x: foo(x),dict_x))
print('Input: {}'.format(dict_x))
print('Output: {}'.format(new_dict_x))
Input: [{(1, 2): 100}, {(1, 3): 150}, {(1, 3): 150, (3, 4): 150}, {(4, 5): 10, (1, 3): 10, (3, 4): 10}, {(5, 6): 15}]
Output: {(1, 2): 100, (4, 5): 10, (5, 6): 15, (1, 3): 310, (3, 4): 160}