如何从zip中只解包部分参数,而不是全部?
我的SQL查询是:
select id,value,zvalue from axis
这个查询给我的结果是这样的:
ans=(1,23,34)(12,34,35)(31,67,45)(231,3412,234)
现在如果我想把这3个变量分成3个不同的列表
id, value, zvalue = zip(*ans)
但是如果我只想把id
和value
作为单独的列表,这样会出现值太多无法拆分的错误。
id, value = zip(*ans)
有没有办法让我可以从SQL查询中创建任意数量的列表?因为如果查询中有10个参数,我在使用ZIP的时候就必须用到所有的参数?
3 个回答
1
我觉得你可能在找这样的东西:
ids = [t[0] for t in ans]
values = [t[1] for t in ans]
第一个列表推导式是从所有的元组中提取第一列,也就是 ans
里的 id
列。第二个列表推导式则是提取所有元组中的第二列,也就是 value
列。
3
如果你在使用Python 3,可以用这个方法来解包额外的n个元素:
In [0]: a, b, *_ = (1, 2, 3, 4)
In [1]: a
1
16
在Python 2中,参数的数量必须完全匹配,这是一个规则。而在Python 3中,你可以用*来把多余的参数收集到一个列表里。
在Python 2中,常见的解决办法是用_
来表示那些你不打算使用的变量,比如:
id,value,_ = zip(*ans) # only works for exactly three values
正如DSM所说,在Python 3中,你可以用*来把“剩下的”参数抓取成一个列表:
id, value, *_ = zip(*ans) # _ will be a list of zero or more args
或者,最简单的方法就是直接对zip的返回结果进行切片:
id,value = zip(*ans)[:2] # ignore all but first two values