tôi có một danh sách (nhãn, đếm) tuples như thế này:Nhóm Python danh sách tuple
[('grape', 100), ('grape', 3), ('apple', 15), ('apple', 10), ('apple', 4), ('banana', 3)]
Từ mà tôi muốn tổng hợp tất cả các giá trị có cùng nhãn (giống nhãn luôn liền kề) và trả về một danh sách trong cùng một trật tự label:
[('grape', 103), ('apple', 29), ('banana', 3)]
tôi biết tôi có thể giải quyết nó với một cái gì đó như:
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
Nhưng có một mo tái Pythonic/thanh lịch/hiệu quả cách để làm điều này?
Tôi thích sử dụng 'operator.itemgetter' thay cho' lambda'. – jathanism
Điều này yêu cầu danh sách phải được sắp xếp trên khóa đầu tiên. Nếu nó chưa được sắp xếp, thì cách tiếp cận defaultdict từ ghostdog74 là một giải pháp tốt hơn nhiều. –