Python:检查命名元组列表是否包含特定的属性值

Ziv*_*iva 5 python list namedtuple

我有一个命名元组列表:

from collections import namedtuple

T = namedtuple('T', ['attr1', 'attr2', 'attr3', 'attr4'])
t1 = T('T1', 1, '1234', 'XYZ')
t2 = T('T2', 2, '1254', 'ABC')
t3 = T('T2', 2, '1264', 'DEF')
l = [t1, t2, t3]
Run Code Online (Sandbox Code Playgroud)

我想检查元素在列表T中是否存在attr1 = 'T2'。

通过执行以下操作检查列表是否包含此类元素:

any(x for x in l if x.attr1 == 'T2')
Run Code Online (Sandbox Code Playgroud)

仅返回该命名元组是否在列表中的信息。
我也想从列表中弹出这个namedtuple。
一种方法是:

if any(x for x in l if x.attr1 == 'T2'):
   result = [x for x in l if x.attr1 == 'T2'].pop()
Run Code Online (Sandbox Code Playgroud)

但是,我不喜欢这种解决方案,因为我在列表上循环了l两次。

有没有更好/更优雅的方法?

cs9*_*s95 3

老式的 for 循环怎么样?简单、优雅,而且只需循环一次。

for x in l:
    if x.attr1 == 'T2':
        break

result = x
Run Code Online (Sandbox Code Playgroud)