2012-11-23 73 views
2

你能帮我转换Python列表:Python的元组列表

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

使: (1, 'a')是指数0

(2, 'b'), (2, 'c')均指数1

(3, 'd'), (3, 'e')均为指数2

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

谢谢你,

回答

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')]] 
0

目前还不清楚你想要什么,但是这个将根据它们的第一个元素将项目分组到列表中。

groups = collections.defaultdict(list) 
for x,y in items: 
    groups[x].append(y) 
+0

不完全正确。该元组不包含索引。 –

+0

@Jon不能相信我错过了那个错字。对不起,仔细校对。 – Antimony