将两个dicts列表组合成一个特定键的一个dicts列表

时间:2014-09-07 14:16:49

标签: python dictionary

我正在努力实现以下目标:

给定的

a = [{'val': 10, 'count': 1}]
b = [{'val': 10, 'count': 4}, {'val': 20, 'count': 2}]

我想得到

output = [{'val': 10, 'count': 5}, {'val': 20, 'count': 2}]

也就是说,根据val合并2个dicts列表:如果在2个dict实例中val是相同的,则通过对计数求和来组合,否则保留2个实例。

顺便说一句,性能是一个问题,因此首选优雅而快速的解决方案。

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您愿意并且能够将数据结构更改为更简单的内容,例如:

a = {10:1}
b = {10:4, 20:2}

然后您可以轻松使用Counter

from collections import Counter

c = Counter()
c.update(a)
c.update(b)

print dict(c)
# Result:
# {10: 5, 20: 2}

答案 1 :(得分:1)

根据@Brionius的想法,您可以使用CounterList comprehension操纵数据:

我们将获取数据并创建一个我们可以轻松使用Counter的dict,然后我们可以将数据相加并最终恢复为我们想要的格式(原始格式)。

from collections import Counter

a = [{'val': 10, 'count': 1}]
b = [{'val': 10, 'count': 4}, {'val': 20, 'count': 2}]
c = Counter()

[c.update({d['val']:d['count']}) for d in a + b]
print [{'val': k, 'count': v} for k, v in c.iteritems()]

输出:

[{'count': 5, 'val': 10}, {'count': 2, 'val': 20}]