У меня есть список (label, count) кортежей, подобных этому:
[('grape', 100), ('grape', 3), ('apple', 15), ('apple', 10), ('apple', 4), ('banana', 3)]
Исходя из этого, я хочу суммировать все значения с одной и той же меткой (одинаковые метки всегда рядом) и вернуть список в том же порядке меток:
[('grape', 103), ('apple', 29), ('banana', 3)]
Я знаю, что мог бы решить что-то вроде:
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
Но есть ли более Pythonic / элегантный / эффективный способ сделать это?