生成集合中的新分组项目列表

时间:2016-08-11 22:22:34

标签: python list-comprehension

我正在试图弄清楚如何转换以下内容:

results = [(516L, u'dupe', u'dupe', 106L), (517L, u'dupe', u'dupe', 106L), (518L, u'testing', u'testing', 106L), (519L, u'testing', u'testing', 106L), (523L, u'duplicate', u'duplicate', 88L), (524L, u'duplicate', u'duplicate', 88L)]

进入这样的新列表:

results = [
 [(516L, u'dupe', u'dupe', 106L), (517L, u'dupe', u'dupe', 106L)],
 [(518L, u'testing', u'testing', 106L), (519L, u'testing', u'testing', 106L)],
 [(523L, u'duplicate', u'duplicate', 88L), (524L, u'duplicate', u'duplicate', 88L)]
]

因为它们都是按照集合中的第3个索引进行分组。

我试过这样的事情:

[list(v) for k,v in groupby(results[3])]

但是返回第3个项目,而不是第3个索引。 groupby是否适合在这里使用?

1 个答案:

答案 0 :(得分:2)

几乎就在那里!

[list(v) for k,v in groupby(results, key=lambda x: x[2])]
                                  #  ^ grouping key  ^ 0-based index

<强>输出

[(516L, u'dupe', u'dupe', 106L), (517L, u'dupe', u'dupe', 106L)], [(518L, u'testing', u'testing', 106L), (519L, u'testing', u'testing', 106L)], [(523L, u'duplicate', u'duplicate', 88L), (524L, u'duplicate', u'duplicate', 88L)]]

如果你不想要一个lambda,那么from operator import itemgetter然后传入key=itemgetter(2)