import itertools as it
import operator as op
l = [{'name': 'Amy', 'count': 1}, {'name': 'Amy', 'count': 2}, {'name': 'Peter', 'count': 1}]
Получить список, отсортированный по ключу «имя» dict.
sl = sorted(l,key=op.itemgetter('name'))
Pass отсортированный список gorupby
с помощью ключа в качестве ключа «имя» в Словаре, который возвращает кортеж ключ и итератор элементов списка, сгруппированных по клавише «имя» в Словаре. F.E. ('Amy',<itertools._grouper object at 0xb5fdac2c>)
.
Итератор дает по одному элементу за итерацию все элементы списка, у которого «ами» есть значение для «имени» ключа dict.
Чтобы получить общее количество ключей «count», мы должны позвонить sum
с новым списком всех полей «count», таких как sum(map(op.itemgetter('count'),g))
.
Чтобы создать список Dict вызова dict
с fitst элемента кортежа, возвращаемого groupby
в качестве значения ключа «имя» и суммы, возвращаемой sum
в качестве значения ключа «Count» для нового Dict.
[ dict(name=k,count=sum(map(op.itemgetter('count'),g)))
for k,g in it.groupby(sl, key=op.itemgetter('name'))]
возможно дубликат [ключевых значений словарных Group в питоне] (http://stackoverflow.com/questions/18180145/group-dictionary-key-values- in-python) – Aaron