這裏是一個(半?) - 班輪:一組一個字母(你需要先排序),然後把你的元組的第二個條目的總和。
from itertools import groupby
from operator import itemgetter
data = [('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)的—排序是最昂貴的操作。如果您的輸入列表是真正的大,你可能會得到更好的下面Ø服務(N)的方法:
from collections import defaultdict
data = [('A', 100), ('B', 50), ('A', 50), ('B', 20), ('C', 10)]
d = defaultdict(int)
for letter, value in data:
d[letter] += value
res = list(d.items())
print(res)
// => [('B', 70), ('C', 10), ('A', 150)]
發佈你試過什麼讓更多的士氣那些閱讀您的問題 –
它會被更好地格式化 – RPGillespie
根據你的錯誤信息,你試圖將一個字符串和一個整數加在一起,這是非法的,沒有類型轉換。 – RPGillespie