Выберите значение из списка кортежей, где условие
У меня есть список кортежей. Каждый кортеж имеет 5 элементов (соответствующих 5 столбцам базы данных)
и я хотел бы сделать запрос
select attribute1 from mylist where attribute2 = something
например.
personAge = select age from mylist where person_id = 10
Можно ли каким-либо образом запросить список кортежей?
Благодарю вас
Ответы
Ответ 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 для этой цели.