我在self.accounts
中有一个帐户对象列表,我知道其中只有一个会有type
属性等于'公平'。从列表中仅获取该对象的最佳(最pythonic)方法是什么?
目前我有以下内容,但我想知道最后的[0]
是否是多余的。有没有更简洁的方法呢?
return [account for account in self.accounts if account.type == 'equity'][0]
答案 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