我正在试图弄清楚如何转换以下内容:
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是否适合在这里使用?
答案 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)
。