有没有办法从单个列表推导表达式输出多个列表?

时间:2014-01-31 20:16:05

标签: python

这样的东西
x, y = [expression for d in data]

基本上我想获得相当于:

x = []
y = []
for d in data:
    x.append(d[0])
    y.append(d[1])

其中data是嵌套列表吗?

如果数据是字典列表怎么办?

x = []
y = []
for d in data:
    x.append(d['key1'])
    y.append(d['key2'])

如果我想对数据是字典列表的每一列应用不同的函数怎么办?

x = []
y = []
for d in data:
    x.append(func1(d['key1']))
    y.append(func2(d['key2']))

2 个答案:

答案 0 :(得分:8)

x, y = zip(*[d[:2] for d in data])

我认为这就是你想要的...它会给你一个x的列表和一个y的列表

如果数据中的每一行只有d [0]和d [1],那么你可以做

x1,x2,x3 = 1,2,3
y1,y2,y3 = 3,4,5
data = [(x1,y1),(x1,y2),(x3,y3)]
x,y = zip(*data)

如果你有一个词典

from operator import itemgetter
x,y,z = zip(*map(itemgetter('key1','key2','key3'),data))

如果你想申请一个你需要做的功能

x,y = zip(*[(function1(row['key']),function2(row['key2'])) for row in data])

答案 1 :(得分:1)

In [53]: dta = [[1,2], [3,4], [5,6]]

In [54]: dta
Out[54]: [[1, 2], [3, 4], [5, 6]]

In [55]: zip(*dta)
Out[55]: [(1, 3, 5), (2, 4, 6)]

In [56]: x,y = zip(*dta)

In [57]: x
Out[57]: (1, 3, 5)

In [58]: y
Out[58]: (2, 4, 6)