Python - 合并两个字典列表,添加重复键的值

时间:2017-08-23 21:02:09

标签: python dictionary

所以我有两个字典列表,如下所示:

A = [{'id':'xyz', 'count': 3},{'id':'zzz', 'count': 1}]
B = [{'id':'xyz', 'count': 4}]

我希望最终输出如下:

C = [{'id':'xyz', 'count': 7},{'id':'zzz', 'count': 1}]

因此,如果两个列表中第一个键的值相同,我们将第二个键的值相加。知道如何实现这一目标吗?到目前为止,我已经尝试过:

for elem in A:
    if elem['id'] in B.elementsKey['id']:
        # TO DO

我正在尝试更新其他元素的值。

注意:每个ID都是唯一的。

由于

2 个答案:

答案 0 :(得分:1)

以下是使用itertools.groupby执行该操作的一种方法:

from itertools import groupby
from operator import itemgetter

f = itemgetter('id')

lst = [{'id': k, 'count': sum(d['count'] for d in g)} 
                         for k, g in groupby(sorted(A+B, key=f), f)]
print(lst)
# [{'id': 'xyz', 'count': 7}, {'id': 'zzz', 'count': 1}]

答案 1 :(得分:1)

from collections import Counter

C_counts = Counter()
for l in (A, B):
    C_counts.update({x['id']: x['count'] for x in l})

C = [{'id':k, 'count':c} for (k, c) in C_counts.items()]

如果你真的不想导入collections.Counter,你可以这样做:

_C = {}
for l in A, B:
    for d in l:
        _C[d['id']] = d['count'] + _C.get(d['id'], 0)

C = [{'id':k, 'count':c} for (k, c) in _C.items()]