2012-01-28 10 views
7

Mi consulta SQL:¿Cómo desempaquetar solo algunos argumentos de zip, no todos?

select id,value,zvalue from axis 

me da resultado como este:

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

ahora si quiero todas estas 3 variables como 3 listas diferentes

id,value,zvalue=zip(*ans) 

que me van a dar 3 listas separadas pero si solo quiero identificación y valor como listas separadas. ME DARÁ MUCHOS VALORES PARA DESEMPACAR EL ERROR.

id,value =zip(*ans) 

¿hay alguna manera en la que puede crear cualquier número de listas de query.because sql si hay 10 parámetros de la consulta, tengo que usar todos los parámetros durante el uso postal ??? favor ayuda

+2

Usted tiene que usar una "variable marcador de posición" para eso. 'id, value, _ = ...' – Gandaro

Respuesta

12

El número de argumentos debe coincidir, esta es una regla en Python 2. Para Python 3, puede usar * para capturar en una lista.

El Pythonic común (2.x) solución es utilizar _ para denotar variables que no se va a utilizar, es decir:

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

Como se comentó DSM, para Python 3, puede utilizar * para agarrar " restante" args como una lista:

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

O, más sencillo, simplemente cortar el regreso de postal:

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

La regla de que el número de argumentos debe coincidir se relajó un poco en Python 3, donde algo como "primero, * medio, último = [1,2,3,4]" te da 1, [2,3], 4. – DSM

+0

Estoy usando Python 2.7 y gracias por la solución. Me encantó la técnica de corte. –

+0

@DSM: Agregó su solución python3, ¡gracias por el comentario! – Macke

1

Creo que podría estar buscando algo como esto:

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

La primera lista de comprensión obtiene la primera columna en todas las tuplas en ans, es decir, la columna de la id. La segunda lista de comprensión obtiene la segunda columna para todas las tuplas en ans, es decir, la columna value.

2

Si está utilizando Python 3 se puede usar esto para desembalar n elementos adicionales:

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

In [1]: a 
1 
Cuestiones relacionadas