Ich würde List Comprehensions verwenden. Nehmen wir an, dies ist Ihre Client
-Klasse:
>>> class Client:
... def __init__(self, screenName):
... self.screenName = screenName
Wenn ich diese Liste von Clients habe:
>>> l = [Client('a'), Client('b'), Client('c')]
...kann ich eine Liste erhalten, die nur die Clients mit einem bestimmten Namen enthält:
>>> [e for e in l if e.screenName == 'b']
[<__main__.Client instance at 0x2e52b0>]
Jetzt einfach das erste - und vermutlich einzige - Element erhalten:
>>> [e for e in l if e.screenName == 'b'][0]
<__main__.Client instance at 0x2e52b0>
>>> c = [e for e in l if e.screenName == 'b'][0]
>>> c.screenName
'b'
Dies ist ziemlich kurz und meiner Meinung nach elegant, kann aber weniger effizient sein, da die List Comprehension über die gesamte Liste iteriert. Wenn Sie diesen Overhead vermeiden möchten, können Sie anstelle von eckigen Klammern anstelle von runden Klammern einen Generator erhalten:
>>> g = (e for e in l if e.screenName == 'b')
>>> g
at 0x2e5440>
>>> g.next()
<__main__.Client instance at 0x2e52b0>
Beachten Sie jedoch, dass die next()
-Methode nur einmal aufgerufen werden kann.
HTH!