2012-01-28 2 views
7

My 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 отдельные списки. , но если я хочу только идентификатор и значение в виде отдельных списков. Он даст мне СЛИШКОМ МНОГО ЗНАЧЕНИЙ ДЛЯ ОШИБКИ UNPACK.

id,value =zip(*ans) 

есть ли способ, где я могу создать любое количество списков из SQL query.because если есть 10 параметров в запросе, я должен использовать все параметры при использовании 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 

Или, простейшие, просто нарезать возвращение из zip:

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] 

Первого списка постижение получает первый столбец во всех кортежах в ans, то есть, id столбца. Второе представление списка получает второй столбец для всех кортежей в ans, то есть столбец value.

2

Если вы используете Python 3 вы можете использовать это для распаковки п дополнительных элементов:

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

In [1]: a 
1