2011-06-01 87 views
2

我有下面這本字典的列表。我想要的是搜索相同的「別名」,並添加他們的分數,將它們合併成一個單一的字典,並製作一份清單。如何在密鑰列表字典中進行比較?

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}]` 

回答

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} 
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

的Python 2.5:

from collections import defaultdict 

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

該死。擊敗我:) +1 – 2011-06-01 06:57:25

相關問題