Назначение в питоне для цикла возможно?

У меня есть словарь d (и отдельный отсортированный список ключей, keys). Я хотел, чтобы цикл обрабатывал только записи, где значение False - поэтому я попробовал следующее:

for key in keys and not d[key]:
 #do foo

Я полагаю, что мое понимание синтаксиса Python не то, что я думал, потому что назначение не предполагает, что это произошло выше, и я получаю ошибку экземпляра.

Конечно, ниже работает, но я бы очень хотел иметь возможность использовать что-то вроде кода выше... возможно?

for key in keys:
 if d[key]: continue
  #foo time!

Спасибо!

3 ответа

Решение

Используйте генекс для этого.

for key in (k for k in keys if not d[k]):
   ....

Если вы указали противоположное (True, если значение должно быть отсканировано), вы можете использовать:

for key in filter(d.get, keys):
    ...
import itertools as it

for key in it.ifilterfalse(d.get, keys):
   ...

itertools часто предлагает лучшие способы упаковки функциональности в итерации (== циклы;-).

Другие вопросы по тегам