如何从元组列表中获取第X个元素的列表?

alv*_*vas 1 python tuples list

我需要所有第一个元素的顺序列表和元组列表中所有第二个元素的另一个顺序列表.

sset = [('foo',1),('bar',3),('zzz',9)]
x = ['foo','bar','zzz']
y = [1,3,9]
Run Code Online (Sandbox Code Playgroud)

我是这样做的:

x = [i for i,j in sset]
y = [j for i,j in sset]
Run Code Online (Sandbox Code Playgroud)

有更简单的方法吗?

我可以使用dict.keys(),dict.values()但是保持列表的顺序?此外,如果我的元组有> 2个元素dict技巧就不起作用了.

x,y = dict(sset).keys(), dict(sset).values()
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 6

您可以使用zip(),sset使用splat任意参数语法进行应用*args:

x, y = zip(*sset)
Run Code Online (Sandbox Code Playgroud)

演示:

>>> sset = [('foo',1),('bar',3),('zzz',9)]
>>> x, y = zip(*sset)
>>> x
('foo', 'bar', 'zzz')
>>> y
(1, 3, 9)
Run Code Online (Sandbox Code Playgroud)

这会创建元组,而不是列表; 您可以zip()根据需要将输出映射到列表:

x, y = map(list, zip(*sset))
Run Code Online (Sandbox Code Playgroud)