簡體   English   中英

嘗試使用 itertools.groupby

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM