2012-01-28 11 views
7

私のSQLクエリ:zipからいくつかの引数だけをアンパックする方法はありますか?

select id,value,zvalue from axis 

は私にこのような結果を与える:

ans=(1,23,34)(12,34,35)(31,67,45)(231,3412,234) 

私は3つの異なるリスト

id,value,zvalue=zip(*ans) 

など、すべてのこれらの3つの変数をしたい場合は、今、それは私を与える3別々のリスト。 しかし、私は別のリストとしてIDと値を必要とする場合。私はエラーをアンパックするには非常に多くの価値を与えるだろう。

id,value =zip(*ans) 

クエリ内の10のパラメータがある場合、私は、SQL query.becauseからリストをいくつでも作成することができますどのような方法があり、私はZIPを使用しているすべてのパラメータを使用する必要があります? 私はあなたがこのような何かを探しているかもしれないと思う

+2

あなたはそのための「プレースホルダ変数」を使用する必要があります。 'id、value、_ = ...' – Gandaro

答えて

12

引数の数は一致する必要があります。これはPython 2のルールです。Python 3では、*を使用してリストに取り込むことができます。

共通ニシキヘビ(2.xの)問題を回避するには、つまり、あなたが使用しません変数を示すために_を使用することです:

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 

あるいは、最も単純には、ちょうどジッパーからのリターンをスライス:

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

+0

私はPython 2.7を使用しています。スライス技術が大好きです。 –

+0

@ DSM:python3ソリューションを追加しました。ありがとうございました! – Macke

1

を助けてください:

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

最初のリスト内包表記は、つまり、ansid列をすべてのタプルの最初の列を取得します。 2番目のリストの理解は、ansのすべてのタプルの2番目の列、つまりvalueの列を取得します。

2

を使用している場合Pythonの3あなたはn個追加要素を開梱のためにこれを使用することができます。

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

In [1]: a 
1 
関連する問題