繁体   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