2016-05-23 32 views
0

Ich habe diese Liste der Wörterbücher:Summe die Werte einer Liste der Wörterbücher

[{'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'}] 

Ich brauche de Wert von ‚Total Vorfälle‘ zu konvertieren in int und summieren sie. Wenn die Daten gleich sind, nimmt die Funktion alle Daten und verwandelt sie in einen. Zum Beispiel sollte die Ausgabe wie folgt sein:

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

Dies ist, was ich bisher versucht:

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

dict1 ist eine Variable, die das erste Wörterbuch enthält. Aber der Ausgang ist nicht das, was ich wollte, es gibt mir diese:

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

Vielen Dank im Voraus

+2

Und wenn die Tage nicht gleich sind? – wim

+0

Angenommen, es gibt zwei Daten anstelle von einem, die Vorfälle werden nur summiert, wenn das Datum, an dem sie auftreten, gleich ist, so dass die Ausgabe eine Liste mit zwei Wörterbüchern anstelle von einem hätte. – Stagg

+1

Und was hast du bisher versucht? – AKS

Antwort

3

itertools.groupby Verwendung:

>>> [{'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

Das ist genau das, was ich brauche, Danke. :) – Stagg

Verwandte Themen