[英]Attempting to use itertools.groupby
所以基本上我有這個元組列表,像這樣
list1 = [(1, 0.3), (2, 0.0), (3, 0.5), (4, 0.1), (5, 0.7), (6, 0.5), (7, 0.0), (8, 0.3)]
我試圖將它組織成子列表,其中每個子列表的每個元組都具有相同的第二個值,就像這樣
list1 = [[0.0, (2, 0.0), (7, 0.0)], [0.1, (4, 0.1)], [0.3, (1, 0.3), (8, 0.3)], [0.5, (3, 0.5), (6, 0.5)], [0.7, (5, 0.7)]]
它們的組織值是每個子列表中的第一個值。
我想出了如何使用基本的內置函數來做到這一點,但它有點難看,一旦我發現了itertools.groupby
,我立即認為我可以使用它並使 function 更簡單。 問題是我真的不能讓它工作。 這種方法甚至可以用於此類問題,還是我只是不明白如何使用它?
你可以使用這樣的東西:
list1 = [(1, 0.3), (2, 0.0), (3, 0.5), (4, 0.1), (5, 0.7), (6, 0.5), (7, 0.0), (8, 0.3)]
d = {k[1] : [] for k in list1}
for item in list1:
d[item[1]].append(item)
output = sorted([[k] + v for k, v in d.items()])
print(output)
Output:
[[0.0, (2, 0.0), (7, 0.0)],
[0.1, (4, 0.1)],
[0.3, (1, 0.3), (8, 0.3)],
[0.5, (3, 0.5), (6, 0.5)],
[0.7, (5, 0.7)]]
嘗試:
from itertools import groupby
from operator import itemgetter
list1 = [(1, 0.3), (2, 0.0), (3, 0.5), (4, 0.1), (5, 0.7), (6, 0.5), (7, 0.0), (8, 0.3)]
output = [[k, *g] for k, g in groupby(sorted(list1, key=itemgetter(1)), key=itemgetter(1))]
print(output)
# [[0.0, (2, 0.0), (7, 0.0)], [0.1, (4, 0.1)], [0.3, (1, 0.3), (8, 0.3)], [0.5, (3, 0.5), (6, 0.5)], [0.7, (5, 0.7)]]
注意,首先需要對列表進行排序,以便groupby
看到要分組的項目彼此相鄰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.