在Python中按属性获取列表项

Yar*_*rin 18 python list

我需要将数据库行对象列表加载到内存中,然后通过其唯一ID获取其中一行.是否有一种干净,pythonic方式通过属性值从列表中查找单个对象?或者我只是循环和比较?

kin*_*all 16

是的,你循环并比较:

items = [item for item in container if item.attribute == value]
Run Code Online (Sandbox Code Playgroud)

然后你会找到一个可以测试的列表,看看你发现了多少.

如果您要这么做,请考虑使用字典,其中键是您感兴趣的属性.


Ruu*_*zen 15

如果你这样做它只给出第一个匹配,而不是比较整个列表:找到匹配标准的第一个序列项.

如果您执行此类操作,则不必捕获异常,None而是:

item = next((i for i in items if i == 'value'), None)
Run Code Online (Sandbox Code Playgroud)


Chr*_*per 7

您可以过滤

matches = filter(lambda obj: obj.attribute == "target value", myListOfObjects)
Run Code Online (Sandbox Code Playgroud)

有关效率的建议,请参阅 kindall 的答案。如果你经常这样做,那么这不是正确的方法。