2012-01-28 42 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 
相關問題