从具有特定参数的列表中获取特定对象

时间:2011-01-24 06:22:03

标签: list python

我在self.accounts中有一个帐户对象列表,我知道其中只有一个会有type属性等于'公平'。从列表中仅获取该对象的最佳(最pythonic)方法是什么?

目前我有以下内容,但我想知道最后的[0]是否是多余的。有没有更简洁的方法呢?

return [account for account in self.accounts if account.type == 'equity'][0]

3 个答案:

答案 0 :(得分:7)

return next(account for account in self.accounts if account.type == 'equity')

return (account for account in self.accounts if account.type == 'equity').next()

答案 1 :(得分:4)

“Pythonic”毫无意义。可能没有比你更简洁的“简洁”解决方案,没有。

Ignacios解决方案具有在找到项目后停止的优势。另一种方法是:

def get_equity_account(self):
    for item in self.accounts:
        if item.type == 'equity':
            return item
    raise ValueError('No equity account found')

哪个可能更具可读性。可读性是Pythonic。 :)

编辑:改善了martineaus建议。把它变成一个完整的方法。

答案 2 :(得分:0)

这是 Python 中的一个普遍需求,但 afaik 没有内置的方法来做到这一点。你也可以这样做:

['room'] = 2