2012-01-28 14 views
7

La mia query SQL:Come decomprimere solo alcuni argomenti da zip, non tutti?

select id,value,zvalue from axis 

mi dà risultato come questo:

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

ora se voglio tutte queste 3 variabili come 3 diverse liste

id,value,zvalue=zip(*ans) 

che mi daranno 3 liste separate ma se voglio solo id e valore come liste separate. Mi darà TROPPI VALORI PER SCONTRARE L'ERRORE.

id,value =zip(*ans) 

c'è un modo in cui posso creare un numero illimitato di liste da SQL query.because se ci sono 10 parametri della query, devo usare tutti i parametri, mentre usando ZIP ??? favore aiuto

+2

Devi usare un "variabile segnaposto" per questo. 'id, value, _ = ...' – Gandaro

risposta

12

Il numero di argomenti deve corrispondere, questa è una regola in Python 2. Per Python 3, è possibile utilizzare * per catturare in un elenco.

La divinatorio comune (2.x) soluzione è utilizzare _ per indicare le variabili non utilizzerà, vale a dire:

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

Come ha commentato DSM, per Python 3, è possibile utilizzare * per afferrare " rimanendo" args come un elenco:

id, value, *_ = zip(*ans) # _ will be a list of zero or more args 

Oppure, più semplice, basta la fetta di ritorno da zip:

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

La regola secondo cui il numero di argomenti deve corrispondere è rilassata un po 'in Python 3, dove qualcosa come "first, * middle, last = [1,2,3,4]" ti dà 1, [2,3], 4. – DSM

+0

Sto usando python 2.7 e grazie per la soluzione. mi è piaciuta la tecnica della fetta. –

+0

@DSM: aggiunta la tua soluzione python3, grazie per il commento! – Macke

1

Penso che potrebbe essere alla ricerca di qualcosa di simile:

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

Il primo di lista ottiene la prima colonna in tutte le tuple in ans, vale a dire, la colonna id. La seconda list comprehension ottiene la seconda colonna per tutte le tuple in ans, ovvero la colonna value.

2

Se si utilizza Python 3 è possibile utilizzare questo per il disimballaggio n elementi aggiuntivi:

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

In [1]: a 
1 
Problemi correlati