2 Stimmen

Ein bestimmtes Objekt aus einer Liste mit einem bestimmten Parameter abrufen

Ich habe eine Liste von Account-Objekten in self.accounts und ich weiß, dass nur einer von ihnen eine type Attribut gleich 'Eigenkapital'. Was ist der beste (pythonischste) Weg, um nur dieses Objekt aus der Liste zu erhalten?

Derzeit habe ich Folgendes, aber ich frage mich, ob die [0] am Ende ist überflüssig. Gibt es einen prägnanteren Weg, dies zu tun?

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

7voto

Ignacio Vazquez-Abrams Punkte 735200
return next(account for account in self.accounts if account.type == 'equity')

oder

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

4voto

Lennart Regebro Punkte 157632

"Pythonisch" bedeutet gar nichts. Es gibt wahrscheinlich keine "prägnantere" Lösung als Ihre, nein.

Ignacios Lösung hat den Vorteil, dass sie anhält, sobald sie den Gegenstand gefunden hat. Eine andere Möglichkeit wäre, dies zu tun:

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

Was vielleicht besser lesbar ist. Lesbarkeit ist pythonisch :)

Edit: Verbessert nach martineaus Vorschlägen. Habe es zu einer vollständigen Methode gemacht.

0voto

jmoz Punkte 7527

Es ist so eine gemeinsame Notwendigkeit in Python, aber afaik gibt es keine eingebaute Möglichkeit, es zu tun. Sie könnten auch tun:

return next(filter(lambda x: x.type == 'equity', self.accounts))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X