如何在字典列表中比较键值?

问题描述

| 我下面有这个字典清单。我想要的是搜索相同的“别名”,并添加其分数,以将其合并为一个字典并列出更清晰的列表。
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))
    

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...