Значения ключевых слов словаря группы в python
У меня есть следующий словарь
mylist = [{'tpdt': '0.00', 'tmst': 45.0, 'tmdt': 45.0, 'pbc': 30, 'remarks': False, 'shift': 1, 'ebct': '0.00', 'tmcdt': '0.00', 'mc_no': 'KA20'},
{'tpdt': '0.00', 'tmst': 45.0, 'tmdt': 45.0, 'pbc': 30, 'remarks': False, 'shift': 1, 'ebct': '0.00', 'tmcdt': '0.00', 'mc_no': 'KA20'},
{'tpdt': '0.00', 'tmst': 55.0, 'tmdt': 55.0, 'pbc': 30, 'remarks': False, 'shift': 1, 'ebct': '0.00', 'tmcdt': '0.00', 'mc_no': 'KA23'},
{'tpdt': '0.00', 'tmst': 55.0, 'tmdt': 55.0, 'pbc': 30, 'remarks': False, 'shift': 1, 'ebct': '0.00', 'tmcdt': '0.00', 'mc_no': 'KA23'}]
Я хочу получить сумму ключа tmst для всех значений словаря "KA20" и "KA23" в списке словарей.
Не могли бы вы предложить свои предложения по этому поводу?
Ответы
Ответ 1
Вы можете использовать itertools.groupby
:
>>> for key, group in itertools.groupby(mylist, lambda item: item["mc_no"]):
... print key, sum([item["tmst"] for item in group])
...
KA20 90.0
KA23 110.0
Обратите внимание, что для корректной работы groupby
, mylist
нужно сортировать с помощью ключа группировки:
from operator import itemgetter
mylist.sort(key=itemgetter("mc_no"))
Ответ 2
Сначала вам нужно отсортировать этот список словарей.. используя следующий код..
Пример.
animals = [{'name':'cow', 'size':'large'},{'name':'bird', 'size':'small'},{'name':'fish', 'size':'small'},{'name':'rabbit', 'size':'medium'},{'name':'pony', 'size':'large'},{'name':'squirrel', 'size':'medium'},{'name':'fox', 'size':'medium'}]
import itertools
from operator import itemgetter
sorted_animals = sorted(animals, key=itemgetter('size'))
то вы используете следующий код
for key, group in itertools.groupby(sorted_animals, key=lambda x:x['size']):
print key,
print list(group)
После того, как вы получите следующий результат...
large [{'name': 'cow', 'size': 'large'}, {'name': 'pony', 'size':'large'}]
medium [{'name': 'rabbit', 'size': 'medium'}, {'name': 'squirrel', 'size':'medium'}, {'name': 'fox', 'size': 'medium'}]
small [{'name': 'bird', 'size': 'small'}, {'name': 'fish', 'size': 'small'}]
Ответ 3
Здесь код, который не требует сортировки mylist
с помощью клавиши "mc_no"
:
from collections import defaultdict
sums = defaultdict(int) # key -> sum
for d in mylist:
sums[d["mc_no"]] += d["tmst"]