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}