Ho una lista di (etichetta, count) tuple come questo:Raggruppamento Python lista tuple
[('grape', 100), ('grape', 3), ('apple', 15), ('apple', 10), ('apple', 4), ('banana', 3)]
Da che voglio sommare tutti i valori con la stessa etichetta (stesse etichette sempre adiacenti) e restituire un elenco nello stesso ordine etichetta:
[('grape', 103), ('apple', 29), ('banana', 3)]
so che avrei potuto risolverlo con qualcosa di simile:
def group(l):
result = []
if l:
this_label = l[0][0]
this_count = 0
for label, count in l:
if label != this_label:
result.append((this_label, this_count))
this_label = label
this_count = 0
this_count += count
result.append((this_label, this_count))
return result
Ma c'è un mo re modo Python/elegante/efficiente per fare questo?
Mi piace l'uso di 'operator.itemgetter' al posto di' lambda'. – jathanism
Ciò richiede che l'elenco sia ordinato sulla prima chiave. Se non è già stato ordinato, l'approccio defaultdict di ghostdog74 è una soluzione molto migliore. –