2017-11-29 9 views
0

Ich habe eine Liste von Dicts, die gruppiert werden müssen, und ich muss zählen und Summe zur gleichen Zeit. Zählen Sie, wie oft dieses Wörterbuch für Worker in meinem Fall und SUM erscheint für was ist das Summenfeld für einen Schlüssel basierend auf Worker Ich kann einen zu der Zeit, aber nicht beides tun.Python-Gruppe mit mit Summe und zählen zur gleichen Zeit nicht funktioniert

dies ist mein Code

grouper = lambda x: (x["rw_worker_nick"], x["rw_date"].replace(day=1)) 
vacation_group = [] 
for key, grp in groupby(sorted(vacation, key = grouper), grouper): 
    temp_dict = dict(zip(["rw_worker_nick", "rw_date"], key)) 
    temp_dict['vac_days'] = len(list(grp)) 
    temp_dict['vac_duration'] = sum(item["rw_duration"] for item in grp) 
    vacation_group.append(temp_dict) 

Die Summe liefert immer 0

irgendwelche Vorschläge ??

danke

Antwort

1

Sie nicht die Iterables iterieren kann, dass groupby mehr produziert als einmal. list(grp) verbraucht alle Elemente aus dem iterablen.

Bewahren Sie die Liste zuerst, dann die Länge nehmen und die Summe aus, dass:

for key, grp in groupby(sorted(vacation, key = grouper), grouper): 
    temp_dict = dict(zip(["rw_worker_nick", "rw_date"], key)) 
    grp = list(grp)) 
    temp_dict['vac_days'] = len(grp) 
    temp_dict['vac_duration'] = sum(item["rw_duration"] for item in grp) 
    vacation_group.append(temp_dict) 
+0

Thanx - wirkt wie ein Zauber – Yebach

Verwandte Themen