2012-01-28 14 views
7

Moje zapytanie SQL:Jak rozpakować tylko niektóre argumenty z suwakiem, nie wszystkie?

select id,value,zvalue from axis 

daje mi prowadzić tak:

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

teraz jeśli chcę wszystkie te 3 zmienne jak 3 różne wykazy

id,value,zvalue=zip(*ans) 

to daje mi 3 oddzielne listy. , ale jeśli chcę tylko id i wartość jako oddzielne listy. Dałoby mi ZBYT WIELE WARTOŚCI, ABY ROZPAKOWAĆ BŁĄD.

id,value =zip(*ans) 

jest jakiś sposób, gdzie można tworzyć dowolną liczbę list z SQL query.because jeśli istnieje 10 parametrów w zapytaniu, muszę używać wszystkich parametrów podczas korzystania ZIP ??? pomóż

+2

Musisz użyć zmiennej „zastępczy” dla tego. 'id, value, _ = ...' – Gandaro

Odpowiedz

12

Liczba argumentów musi być zgodna, jest to reguła w Pythonie 2. W języku Python 3 można użyć znaku * do przechwycenia do listy.

Wspólna pythonic (2.x) Rozwiązaniem jest użycie _ do oznaczania zmiennych nie będzie używany, a mianowicie:

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

Jak skomentował DSM, dla Pythona 3, można użyć * chwycić " Pozostała”args jako lista:

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

OR, najprostszy, tylko plasterek zwrotu od Kod pocztowy:

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

Reguła, że ​​liczba argumentów musi być zgodna, jest nieco luźniejsza w Pythonie 3, gdzie coś takiego jak "first, * middle, last = [1,2,3,4]" daje ci 1, [2,3], 4. – DSM

+0

Używam Pythona 2.7 i dziękuję za rozwiązanie. uwielbiał technikę plasterek. –

+0

@DSM: Dodano twoje rozwiązanie python3, dzięki za komentarz! – Macke

1

myślę, że może być patrząc na coś takiego:

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

Pierwsza lista zrozumienie dostaje pierwszą kolumnę we wszystkich krotek w ans, czyli kolumnę id. Druga lista zawiera drugą kolumnę dla wszystkich krotek w kolumnie ans, czyli value.

2

Jeśli używasz Python 3 można użyć tego do rozpakowywania n dodatkowe elementy:

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

In [1]: a 
1 
Powiązane problemy