这是一个(一个半?)划线:按字母分组(您需要对其进行排序),然后取元组的第二个条目的总和。
from itertools import groupbyfrom operator import itemgetterdata = [('A', 100), ('B', 50), ('A', 50), ('B', 20), ('C', 10)]res = [(k, sum(map(itemgetter(1), g))) for k, g in groupby(sorted(data, key=itemgetter(0)), key=itemgetter(0))]print(res)// => [('A', 150), ('B', 70), ('C', 10)]以上是O(n log n)-排序是最昂贵的操作。如果您的输入列表确实很大,那么以下O(n)方法可能会更好地为您服务:
from collections import defaultdictdata = [('A', 100), ('B', 50), ('A', 50), ('B', 20), ('C', 10)]d = defaultdict(int)for letter, value in data: d[letter] += valueres = list(d.items())print(res)// => [('B', 70), ('C', 10), ('A', 150)]


