2012-01-28 22 views
7

我的SQL查询:如何解压仅来自zip的一些参数,不是全部?

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和值作为单独的列表。它会给我太多的价值来解开错误。

id,value =zip(*ans) 

有任何方法,其中i可以从SQL query.because创建任意数量的列表,如果有在查询10个参数,我必须使用同时使用ZIP所有参数??? 请帮助

+2

你必须使用一个“占位符变量”了点。 'id,value,_ = ...' – Gandaro 2012-01-28 22:10:18

回答

12

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

常见的Python化(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 

或者,简单的,只是从片拉链回报:

id,value = zip(*ans)[:2] # ignore all but first two values 
+3

在Python 3中,参数个数必须匹配的规则会略微放宽一些,比如“first,* middle,last = [1,2,3,4]”给你1,[2,3],4. – DSM 2012-01-28 22:20:16

+0

我使用python 2.7,并感谢解决方案。喜欢切片技术。 – 2012-01-28 22:25:26

+0

@DSM:添加了您的python3解决方案,感谢您的评论! – Macke 2012-01-31 16:53:56

1

我想你可能会寻找这样的事情:

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

第一个列表理解获取所有元组的第一列ans,也就是id列。第二个列表理解获得ans中所有元组的第二列,即value列。

2

如果您正在使用Python 3中您可以使用此拆包ň追加要素:

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

In [1]: a 
1 
相关问题