2016-05-23 3 views
0

У меня есть этот список словарей:Суммировать значения списка словарей

[{'Total Incidents': '1', 'CrimeDate': '05/14/2016'}, {'Total Incidents': '1', 'CrimeDate': '05/14/2016'}, {'Total Incidents': '1', 'CrimeDate': '05/14/2016'}, {'Total Incidents': '1', 'CrimeDate': '05/14/2016'}, {'Total Incidents': '1', 'CrimeDate': '05/14/2016'}, {'Total Incidents': '1', 'CrimeDate': '05/14/2016'}, {'Total Incidents': '1', 'CrimeDate': '05/14/2016'}, {'Total Incidents': '1', 'CrimeDate': '05/14/2016'}, {'Total Incidents': '1', 'CrimeDate': '05/14/2016'}] 

Мне нужно преобразовать де значение «Всего инцидентов» к ИНТ, и суммировать их. Кроме того, если даты равны, функция принимает все даты и превращает их в одну. Например, вывод должен быть таким:

[{'Total Incidents': 9, 'CrimeDate':'05/14/2016'}] 

Это то, что я пытался до сих пор:

dictf = reduce(lambda x, y: dict((k, v + y[k]) for k, v in x.iteritems()), dict1) 

dict1 является переменной, которая содержит первый словарь. Но Ouput не то, что я хотел, это дает мне это:

{'Total Incidents': '111111111', 'CrimeDate': '05/14/201605/14/201605/14/201605/14/201605/14/201605/14/201605/14/201605/14/201605/14/2016'} 

Заранее спасибо

+2

И если даты не равны? – wim

+0

Предположим, что есть две даты вместо одной, инциденты суммируются только в том случае, если даты, которые они происходят, одинаковы, поэтому на выходе будет список с двумя словарями вместо одного. – Stagg

+1

И, что вы пробовали до сих пор? – AKS

ответ

3

Использование itertools.groupby:

>>> [{'CrimeDate': g[0], 'Total Incidents': sum(map(lambda x: int(x['Total Incidents']), g[1]))} for g in itertools.groupby(d, lambda x: x['CrimeDate'])] 
[{'Total Incidents': 9, 'CrimeDate': '05/14/2016'}] 
+0

Это то, что мне нужно, спасибо. :) – Stagg

Смежные вопросы