Aquí es una alternativa a algunas de las otras versiones de filtro:
from operator import attrgetter as attr
for airport in filter(attr('is_important'), airports):
...
Esto tiene la ventaja de ser muy concisa y también que le permite usar la notación de punto attr ('first_class.is_full').
También podría poner algo así (o una versión con una lista de comprensión) en una función de utilidad como filter_by_attr. Posteriormente, se podría hacer:
for airport in filter_by_attr(airports, 'is_important'):
...
sigo pensando e-satis es correcta de ponerlo en una nueva variable no importa el método que utilice, sin embargo. Es más claro de esa manera, especialmente si el uso no coincide exactamente con el nombre del atributo en cuestión (o si el criterio es más complejo).
Mi única observación al respecto sería que si te encuentras usando esto en varios lugares, tal vez deberías hacer que los aeropuertos sean una colección especial con 'important_airports' como @property que devuelve la colección filtrada. O algún tipo de abstracción para ocultar el filtrado (como una llamada de servicio).
Si no le gusta tener tantos "aeropuertos" en una línea, canjee tres de ellos por un solo carácter: 'para el aeropuerto en (x para x en los aeropuertos si x.is_important): ' – MattH
Me pregunto por qué Python no tiene' para aeropuerto en aeropuertos si airport.is_important: ', parece útil y claro. – Mark
También puede usar 'if not airport.is_important: continue' para evitar sangrías. Pero me gusta más la respuesta aceptada, así que no sé por qué escribí este comentario. – Moberg