【发布时间】:2012-11-23 20:48:04
【问题描述】:
你能帮我转换一下 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] 相等的元组都有相同的索引。
谢谢你,
【问题讨论】:
你能帮我转换一下 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] 相等的元组都有相同的索引。
谢谢你,
【问题讨论】:
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')]]
【讨论】:
不清楚你想要什么,但这会根据项目的第一个元素将项目分组到列表中。
groups = collections.defaultdict(list)
for x,y in items:
groups[x].append(y)
【讨论】: