【发布时间】:2012-02-23 17:35:27
【问题描述】:
我需要将数据库行对象列表加载到内存中,然后通过其唯一 ID 获取其中一个行。是否有一种干净的、pythonic 的方法可以通过属性值从列表中查找单个对象?还是我只是循环比较?
【问题讨论】:
-
是否有理由不直接对数据库查询执行此操作?
我需要将数据库行对象列表加载到内存中,然后通过其唯一 ID 获取其中一个行。是否有一种干净的、pythonic 的方法可以通过属性值从列表中查找单个对象?还是我只是循环比较?
【问题讨论】:
是的,你循环比较:
items = [item for item in container if item.attribute == value]
然后你会得到一个可以测试的列表,看看你找到了多少。
如果您经常这样做,请考虑使用字典,其中键是您感兴趣的属性。
【讨论】:
如果您这样做,它只会给出第一个匹配项,而不是比较整个列表:find first sequence item that matches a criterion。
如果你做这样的事情,你不必捕获异常,而是得到None:
item = next((i for i in items if i == 'value'), None)
【讨论】:
你可以filter:
matches = filter(lambda obj: obj.attribute == "target value", myListOfObjects)
有关效率的建议,请参阅 kindall 的回答。如果你经常这样做,那不是正确的方法。
【讨论】: