我需要一个包含所有第一个元素的顺序列表和另一个包含元组列表中所有第二个元素的顺序列表。
sset = [('foo',1),('bar',3),('zzz',9)]
x = ['foo','bar','zzz']
y = [1,3,9]
我是这样做的:
x = [i for i,j in sset]
y = [j for i,j in sset]
有没有更简单的方法?
我可以使用 dict.keys() 和 dict.values() 但列表的顺序是否保持不变?此外,如果我的元组有 >2 个元素,则 dict 技巧将不起作用。
x,y = dict(sset).keys(), dict(sset).values()
请您参考如下方法:
您可以使用 zip(),使用 splat 任意参数语法应用 sset *args:
x, y = zip(*sset)
演示:
>>> sset = [('foo',1),('bar',3),('zzz',9)]
>>> x, y = zip(*sset)
>>> x
('foo', 'bar', 'zzz')
>>> y
(1, 3, 9)
这会创建元组,而不是列表;您可以根据需要将 zip() 输出映射到列表:
x, y = map(list, zip(*sset))
