Назначение в питоне для цикла возможно?
У меня есть словарь 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
часто предлагает лучшие способы упаковки функциональности в итерации (== циклы;-).