Как я могу выполнить сравнение в списке словарей для значений ключа?

#python #list #search

#python #Список #Поиск

Вопрос:

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

 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:

Python 2.5:

 from collections import defaultdict 

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

Ответ №2:

 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}
  

Ответ №3:

В 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))