Назначение в питоне для цикла возможно? - PullRequest
2 голосов
/ 18 июня 2010

У меня есть словарь 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 ]

5 голосов
/ 18 июня 2010

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

for key in (k for k in keys if not d[k]):
   ....
2 голосов
/ 18 июня 2010
import itertools as it

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

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

2 голосов
/ 18 июня 2010

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

for key in filter(d.get, keys):
    ...
...