Подтвердить что ты не робот

Выберите значение из списка кортежей, где условие

У меня есть список кортежей. Каждый кортеж имеет 5 элементов (соответствующих 5 столбцам базы данных) и я хотел бы сделать запрос

select attribute1 from mylist where attribute2 = something

например.

personAge = select age from mylist where person_id = 10

Можно ли каким-либо образом запросить список кортежей?

Благодарю вас

4b9b3361

Ответ 1

Если у вас named tuples, вы можете сделать это:

results = [t.age for t in mylist if t.person_id == 10]

В противном случае используйте индексы:

results = [t[1] for t in mylist if t[0] == 10]

Или используйте распаковку в соответствии с ответом Nate. Обратите внимание, что вам не нужно указывать осмысленное имя для каждого предмета, который вы распаковываете. Вы можете сделать (person_id, age, _, _, _, _), чтобы распаковать шестипозиционный кортеж.

Ответ 2

Одним из решений для этого было бы понимание списка с совпадением шаблонов внутри вашего кортежа:

>>> mylist = [(25,7),(26,9),(55,10)]
>>> [age for (age,person_id) in mylist if person_id == 10]
[55]

Другой способ - использовать map и filter:

>>> map( lambda (age,_): age, filter( lambda (_,person_id): person_id == 10, mylist) )
[55]

Ответ 3

Да, вы можете использовать фильтр, если знаете, в какой позиции в кортеже находится нужный столбец. Если дело в том, что id является первым элементом кортежа, вы можете отфильтровать список следующим образом:

filter(lambda t: t[0]==10, mylist)

Это вернет список соответствующих кортежей. Если вы хотите возраст, просто выберите нужный элемент. Вместо фильтра вы также можете использовать понимание списка и выбрать элемент в первый раз. Вы можете сразу распаковать его (если есть только один результат):

[age] = [t[1] for t in mylist if t[0]==10]

Но я настоятельно рекомендую использовать dictionaries или named tuples для этой цели.