通过属性在Python中获取列表项
我需要把数据库中的一堆行对象加载到内存里,然后通过它们的唯一ID来获取其中一行。有没有什么简单、符合Python风格的方法,可以通过某个属性值从列表中找到一个对象?还是说我只能一个一个地循环比较?
3 个回答
7
你可以使用filter这个功能:
matches = filter(lambda obj: obj.attribute == "target value", myListOfObjects)
关于效率方面的建议,可以看看kindall的回答。如果你经常这样做,这种方法可能不太合适。
21
如果你这样做的话,它只会给出第一个匹配的结果,而不是对整个列表进行比较:找到第一个符合条件的列表项。
如果你这样做,就不需要捕获异常,而是会得到 None
作为结果:
item = next((i for i in items if i == 'value'), None)
23
是的,你可以通过循环来比较:
items = [item for item in container if item.attribute == value]
这样你就能得到一个列表,可以用来检查你找到了多少个。
如果你经常需要这样做,可以考虑使用字典,字典里的键是你感兴趣的属性。