[英]python3 summarize elements form list of lists
我有一個清單清單
lst = [[0,1],[1,1],[3,1],[1,2],[1,3],[3,5]]
我想將子列表的第二項歸納為相等的第一項。 結果應該看起來像
lst = [[0,1],[1,6],[3,6]]
我嘗試過這樣的事情:
lst=[[0, 0.25], [1, 0.125], [2, 0.0625], [3, 0.0625], [1, 0.125], [2, 0.0625], [3, 0.03125], [4, 0.03125]]
for listitem in range(len(lst)):
first=listitem[0]
second = 0
for obj in lst:
if obj[0] == first:
second += obj[1]
lst.remove(obj)
listitem[1] = second
使用defaultdict
from collections import defaultdict
lst=[[0, 0.25], [1, 0.125], [2, 0.0625], [3, 0.0625], [1, 0.125], [2, 0.0625], [3, 0.03125], [4, 0.03125]]
res = defaultdict(int)
for el in lst:
res[el[0]] += el[1]
res_list = [[k,v] for (k,v) in res.items()]
print(res_list)
[[0, 0.25], [1, 0.25], [2, 0.125], [3, 0.09375], [4, 0.03125]]
groupby
返回一個密鑰,並在具有相同密鑰的項目上進行迭代。 必須將按相同鍵排序的列表傳遞給它:
from itertools import groupby
from operator import itemgetter
lst = [[0,1],[1,1],[3,1],[1,2],[1,3],[3,5]]
result = [[k,sum(b for a,b in g)]
for k,g in groupby(sorted(lst),key=itemgetter(0))]
print(result)
輸出:
[[0, 1], [1, 6], [3, 6]]
另一種思考方式是每對中的第一項是key
,第二項是value
-因此,如果創建dict
,則可以在遇到每個鍵時將值加在一起-甚至如果使用defaultdict
更容易:
from collections import defaultdict
summary = defaultdict(int)
for sublist in lst:
key, value = sublist
summary[key] += value
print(summary.items())
summary[key] += value
是這里的主力軍。 它能做什么:
key
int
來創建默認值 key
下的summary
range(n)
產生一個列表,例如[0,1,2...n-1]
,所以listitem
的類型是int
而不是list
。
lst=[[0, 0.25], [1, 0.125], [2, 0.0625], [3, 0.0625], [1, 0.125], [2, 0.0625], [3, 0.03125], [4, 0.03125]]
for listitem in lst:
first = listitem[0]
second = 0
for obj in lst:
if obj[0] == first:
second += obj[1]
lst.remove(obj)
listitem[1] = second
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.