问题描述
|
我下面有这个字典清单。我想要的是搜索相同的“别名”,并添加其分数,以将其合并为一个字典并列出更清晰的列表。
d=[{\"alias\": \"2133232\",\"score\": 144},{\"alias\": \"u234243\",\"score\": 34},{\"alias\": \"2133232\",\"score\": 14},\"score\": 4},\"score\": 344}]
输出应如下所示:
`[{\"alias\": \"2133232\",\"score\": 158},\"score\": 416}]`
解决方法
from itertools import groupby
from operator import itemgetter
dict(((u,sum(row[\'score\'] for row in rows)) for u,rows in
groupby(sorted(d,key=itemgetter(\'alias\')),key=itemgetter(\'alias\'))))
# {\'2133232\': 158,\'u234243\': 416}
, Python 2.5:
from collections import defaultdict
h = defaultdict(int)
for i in d:
h[i[\'alias\']] += i[\'score\']
, 在Python 3.1+中:
import collections
res = collections.Counter()
for dct in d:
res[dct[\'alias\']] += dct[\'score\']
print(repr(res))
在3.1之前,您可以使用此Counter类,用,6ѭ(2.5+)替换Counter()
,或以下内容:
res = {}
for dct in d:
alias = dct[\'alias\']
if alias not in res:
res[alias] = 0
res[alias] += dct[\'score\']
print(repr(res))