如何編寫一個函數在python中添加相應字母的整數?如何編寫一個函數在python中添加相應字母的整數?
例如:
L=[('a',3),('b',4),('c',5),('a',2),('c',2),('b',1)]
如何通過L中的項目僅通過循環解決呢?
如何編寫一個函數在python中添加相應字母的整數?如何編寫一個函數在python中添加相應字母的整數?
例如:
L=[('a',3),('b',4),('c',5),('a',2),('c',2),('b',1)]
如何通過L中的項目僅通過循環解決呢?
這裏的強制性單行itertools解決方案:
>>> import itertools
>>> [
... (k, sum(g[1] for g in group))
... for k, group in itertools.groupby(sorted(L), key=lambda x: x[0])
... ]
[('a', 5), ('b', 5), ('c', 7)]
我想最明顯的方式就是循環並把它們加起來。
>>> L=[('a',3),('b',4),('c',5),('a',2),('c',2),('b',1)]
>>> import collections
>>> d=collections.defaultdict(int)
>>> for key,n in L:
... d[key] += n
...
>>> sorted(d.items())
[('a', 5), ('b', 5), ('c', 7)]
可能更喜歡'collection.Counter',因爲它也免費提供'counter.most_common()'。 – bereal
您可以使用它的字典並添加重複鍵值,就像那樣。
dict = {}
for i in L:
if i[0] in dict:
dict[i[0]] += i[1]
else:
dict[i[0]] = i[1]
dict.items()
輸出將是:[( '一個',5),( 'C',7),( 'B',5)]
可以嘗試以限定這樣的功能:
def sorting(L):
dit = {}
result = []
for l in L :
dit[l[0]]= 0
for key , item in dit.items():
for ll in L :
if key == ll[0] :
dit[key] += ll[1]
for key , item in dit.items():
result.append((key , item))
return sorted(result)
,你會看到的結果是:
>>> sorting(L)
[('a', 5), ('b', 5), ('c', 7)]
那你試試,你在哪裏卡住了? – 2012-11-22 07:51:12