2

你能帮我转换 Python 列表吗:

[(1, 'a'), (2, 'b'), (2, 'c'), (3, 'd'), (3, 'e')]

所以: (1, 'a')是索引 0

(2, 'b'), (2, 'c')都是索引 1

(3, 'd'), (3, 'e')都是索引 2

简单地说,所有 element[0] 相等的元组都具有相同的索引。

谢谢你,

4

2 回答 2

6

itertools.groupby救援!:

lst = [(1, 'a'), (2, 'b'), (2, 'c'), (3, 'd'), (3, 'e')]
lst.sort(key=lambda x: x[0])  #Only necessary if your list isn't sorted already.
new_lst = [list(v) for k,v in itertools.groupby(lst,key=lambda x:x[0])]

如果你愿意,你可以使用operator.itemgetter(0)而不是lambda...

演示:

>>> import itertools
>>> lst = [(1, 'a'), (2, 'b'), (2, 'c'), (3, 'd'), (3, 'e')]
>>> lst.sort(key=lambda x: x[0])
>>> new_lst = [list(v) for k,v in itertools.groupby(lst,key=lambda x:x[0])]
>>> new_lst
[[(1, 'a')], [(2, 'b'), (2, 'c')], [(3, 'd'), (3, 'e')]]
于 2012-11-23T20:49:50.390 回答
0

目前尚不清楚您想要什么,但这会根据项目的第一个元素将项目分组到列表中。

groups = collections.defaultdict(list)
for x,y in items:
    groups[x].append(y)
于 2012-11-23T20:51:32.497 回答