如何在键值列表中对键值进行比较?

时间:2011-06-01 06:37:29

标签: python list search

我在下面有这个字典列表。我想要的是搜索相同的“别名”并添加他们的分数,将它们组合成一个字典并制作一个更清晰的列表。

d=[{"alias": "2133232", "score": 144}, {"alias": "u234243", "score": 34}, {"alias": "u234243", "score": 34},{"alias": "2133232", "score": 14}, {"alias": "u234243", "score": 4}, {"alias": "u234243", "score": 344}]

输出应如下所示:

`[{"alias": "2133232", "score": 158}, {"alias": "u234243", "score": 416}]`

3 个答案:

答案 0 :(得分:2)

Python 2.5:

from collections import defaultdict 

h = defaultdict(int)
for i in d:
    h[i['alias']] += i['score']

答案 1 :(得分:1)

在Python 3.1 +中:

import collections
res = collections.Counter()
for dct in d:
   res[dct['alias']] += dct['score']
print(repr(res))

在3.1之前,您可以使用this Counter class,将Counter()替换为collections.defaultdict(int)(2.5+),也可以使用以下内容:

res = {}
for dct in d:
   alias = dct['alias']
   if alias not in res:
      res[alias] = 0
   res[alias] += dct['score']
print(repr(res))

答案 2 :(得分:1)

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}