2011-01-11 9 views
1
Für Formed Mit

In Python Ich habe diese Aussage:Einschließlich Wenn in Arrays

blog_ids = [c.blog_id for c in connections] 

Welchen Python im Grunde eine Reihe von allen Blog-IDs in den Verbindungen erstellen erzählt. Wenn das Objekt connections einige Typen None hat, würde c.blog_id leider eine Ausnahme verursachen. Gibt es eine Syntax, um dieses Problem zu lösen? Ich habe versucht, diese aber es funktioniert nicht:

blog_ids = [c.blog_id for c not None in connections] 

Antwort

8
blog_ids = [c.blog_id for c in connections if c is not None] 
+0

Die könnte zu '[c.blog_id für c in Verbindungen wenn c]' gekürzt werden, wenn Sie wissen, dass 'Verbindungen' nur' None' oder gültige Werte hat. – TryPyPy

+0

Danke. Aber wie lautet die Syntax für diese Art von Aussagen? Sind sie nur eine spezielle Syntax für die Anweisungen 'for' und 'if'? In den Worten, können wir kompliziertere Aussagen basierend auf einer bestimmten Syntax bilden? – Rafid

+0

Hier haben Sie einige Tutorial auf Listen-Comprehensions: http://docs.python.org/howto/functional.html#generator-expressions-and-list-comprehensions – gruszczy

0

Die Sache hier wohl zu fragen, welche Art von Objekten, die Sie in Ihrem connections Objekt haben. Sind das gültige Objekte mit dem Attribut blog_id oder None? Oder besteht die Möglichkeit, dass unter diesen Objekten auch andere Objekte (zusätzlich zu None-Objekten) ohne das Attribut blog_id vorhanden sind.

+0

Das ist ein guter Punkt, aber ja, sie sind entweder gültige Objekte mit blog_id Attribut oder keine Objekte. Tatsächlich werden sie über eine Google AppEngine-Anweisung für die Connection-Klasse zurückgegeben, sodass sie entweder gültig sind oder keine, wenn ein Schlüssel ungültig ist. – Rafid