如何从zip解压缩一些参数,而不是全部?

时间:2012-01-28 22:00:31

标签: python

我的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)

它会给我3个单独的列表。 但如果我只想将id和value作为单独的列表。它会给我很多值来解决错误。

id,value =zip(*ans)

有什么方法可以从sql查询创建任意数量的列表。因为如果查询中有10个参数,我必须在使用ZIP时使用所有参数??? 请帮忙

3 个答案:

答案 0 :(得分:14)

参数的数量必须匹配,这是Python 2中的规则。对于Python 3,您可以使用*来捕获到列表中。

常见的pythonic(2.x)解决方法是使用_来表示不使用的变量,即:

id,value,_ = zip(*ans) # only works for exactly three values

正如DSM评论的那样,对于Python 3,您可以使用*来抓取“剩余的”args作为列表:

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  

答案 1 :(得分:2)

如果您使用的是Python 3,则可以使用它来解压 n 其他元素:

In [0]: a, b, *_ = (1, 2, 3, 4)

In [1]: a
1

答案 2 :(得分:1)

我想你可能正在寻找这样的东西:

ids = [t[0] for t in ans]
values = [t[1] for t in ans]

第一个列表推导获取ans中所有元组的第一列,即id列。第二个列表推导获得ans中所有元组的第二列,即value列。