我正在努力实现以下目标:
给定的
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个实例。
顺便说一句,性能是一个问题,因此首选优雅而快速的解决方案。
谢谢!
答案 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的想法,您可以使用Counter和List 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}]