我有一个字典列表,如下所示:
result = [
{'so': 'SO1', 'amt':250},
{'so': 'SO2', 'amt':200},
{'so': 'SO1', 'amt':100}
]
我需要合并它,结果是:
result = [
{'so': 'SO1', 'amt':350},
{'so': 'SO2', 'amt':200}
]
即合并具有相同SO
的词典并添加amt
。
答案 0 :(得分:3)
Collections.counter
提供了一种以这种方式合并字典的优雅方式。
from collections import Counter
counters = [Counter({k['so']: k['amt']}) for k in result]
r = sum(counters, Counter())
# Counter({'SO1': 350, 'SO2': 200})
result = [{'so': k, 'amt': r.get(k)} for k in r]
# [{'so': 'SO1', 'amt': 350}, {'so': 'SO2', 'amt': 200}]
答案 1 :(得分:2)
我的解决方案:
d = dict()
for so, amt in map(lambda x: (x["so"],x["amt"]), result):
d[so] = d.get(so, 0) + amt
d
是您想要的最终字典。如果您有一个巨大的列表result
,则应该使用imap而不是地图。
<强>解释强>
map(lambda x: (x["so"],x["amt"]), result)
会产生以下列表:
result = [
('SO1', 250),
('SO2', 200),
('SO1', 100)
]
d.get(so,0)
与d[so]
类似,但如果d
没有值为so
的键,则返回0作为默认值。
答案 2 :(得分:1)
试试这个..
import collections
data = collections.OrderedDict()
for d in dictlist:
so = d['so']
data.setdefault(so, 0)
data[so] += d['amt']
result = [{'so':k, 'amt': v} for k, v in data.items()]
希望这有帮助