使用itertools分组元组列表

时间:2014-12-17 20:52:24

标签: python

我正在尝试根据第二个参数对数据进行分组。

test= [(1,1),(3,1),(5,0),(3,0),(2,1)]

我正在从此thread

中删除代码
from itertools import groupby
from operator import itemgetter
result = [list(group) for key, group in groupby(test, itemgetter(1))]

但不是得到一个看起来像的结果:  [[(1,1),(3,1),(2,1)],[(5,0),(3,0)]]

为什么我将最后一个元组放在一个单独的列表中,而我应该将其与其他值组合在一起 1 是第二个值

[[(1,1),(3,1)],[(5,0),(3,0)],的 [(2,1)]

1 个答案:

答案 0 :(得分:1)

这也让我在过去绊倒了。如果您希望它全局分组,最好先对列表进行排序:

In [163]: test = [(1,1),(3,1),(5,0),(3,0),(2,1)]

In [164]: crit = operator.itemgetter(1)

In [165]: test.sort(key=crit)

In [166]: result = [list(group) for key, group in itertools.groupby(test, crit)]

In [167]: result
Out[167]: [[(5, 0), (3, 0)], [(1, 1), (3, 1), (2, 1)]]