在Python中按属性获取列表项

时间:2012-02-01 00:18:53

标签: python list

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

3 个答案:

答案 0 :(得分:15)

是的,你循环并比较:

items = [item for item in container if item.attribute == value]

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

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

答案 1 :(得分:13)

如果你这样做,它只会给出第一个匹配,而不是比较整个列表:find first sequence item that matches a criterion

如果您执行此类操作,则无需捕获异常,而是获取None

item = next((i for i in items if i == 'value'), None)

答案 2 :(得分:4)

你可以filter

matches = filter(lambda obj: obj.attribute == "target value", myListOfObjects)

请参阅kindall的答案以获取有关效率的建议。如果你这么做,那就不是正确的方法了。