【问题标题】:Get list item by attribute in Python在Python中按属性获取列表项
【发布时间】:2012-02-23 17:35:27
【问题描述】:

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

【问题讨论】:

  • 是否有理由不直接对数据库查询执行此操作?

标签: python list


【解决方案1】:

是的,你循环比较:

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

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

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

【讨论】:

    【解决方案2】:

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

    如果你做这样的事情,你不必捕获异常,而是得到None

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

    【讨论】:

      【解决方案3】:

      你可以filter:

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

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

      【讨论】:

      • 什么是有效地做到这一点的正确方法?谢谢。
      猜你喜欢
      • 2013-10-10
      • 2011-08-31
      • 2021-03-26
      • 2010-09-10
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      相关资源
      最近更新 更多