从条件列表中选择值

xra*_*alf 34 python tuples

我有一个元组列表.每个元组都有5个元素(对应5个数据库列),我想进行查询

select attribute1 from mylist where attribute2 = something

例如

personAge = select age from mylist where person_id = 10

是否有可能以某种方式查询元组列表?

谢谢

Ste*_*ski 64

如果您已命名元组,则可以执行以下操作:

results = [t.age for t in mylist if t.person_id == 10]
Run Code Online (Sandbox Code Playgroud)

否则使用索引:

results = [t[1] for t in mylist if t[0] == 10]
Run Code Online (Sandbox Code Playgroud)

或者按照Nate的回答使用元组解包.请注意,您不必为解压缩的每个项目指定有意义的名称.你可以(person_id, age, _, _, _, _)打开一个六项元组.


Nat*_*ate 14

对此的一个解决方案是列表理解,在元组内部使用模式匹配:

>>> mylist = [(25,7),(26,9),(55,10)]
>>> [age for (age,person_id) in mylist if person_id == 10]
[55]
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用mapfilter:

>>> map( lambda (age,_): age, filter( lambda (_,person_id): person_id == 10, mylist) )
[55]
Run Code Online (Sandbox Code Playgroud)


rpl*_*lnt 8

是的,如果您知道所需列位于元组中的哪个位置,则可以使用过滤器.如果情况是id是元组的第一个元素,那么你可以像这样过滤列表:

filter(lambda t: t[0]==10, mylist)
Run Code Online (Sandbox Code Playgroud)

这将返回相应元组的列表.如果你想要年龄,只需选择你想要的元素.您也可以使用列表理解并在第一步中选择元素,而不是过滤器.您甚至可以立即解压缩(如果只有一个结果):

[age] = [t[1] for t in mylist if t[0]==10]
Run Code Online (Sandbox Code Playgroud)

但我强烈建议为此目的使用词典命名元组.