通过属性在Python中获取列表项

23 投票
3 回答
32588 浏览
提问于 2025-04-17 12:04

我需要把数据库中的一堆行对象加载到内存里,然后通过它们的唯一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]

这样你就能得到一个列表,可以用来检查你找到了多少个。

如果你经常需要这样做,可以考虑使用字典,字典里的键是你感兴趣的属性。

撰写回答