Как я могу сделать сравнение в Списке словарей для ключевых значений? - PullRequest
2 голосов
/ 01 июня 2011

У меня есть этот список словаря ниже.То, что я хочу, это искать тот же «псевдоним» и добавить их счет, чтобы объединить их в один словарь и сделать более чистый список.

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 ]

2 голосов
/ 01 июня 2011

Python 2.5:

from collections import defaultdict 

h = defaultdict(int)
for i in d:
    h[i['alias']] += i['score']
1 голос
/ 01 июня 2011
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 голос
/ 01 июня 2011

В Python 3.1 +:

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

До версии 3.1 вы можете использовать этот класс счетчиков , заменить 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...