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

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

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

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

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

Благодарность!

2
malangi 18 Июн 2010 в 05:22

3 ответа

Лучший ответ

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

for key in (k for k in keys if not d[k]):
   ....
5
Ignacio Vazquez-Abrams 18 Июн 2010 в 01:25

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

for key in filter(d.get, keys):
    ...
2
Oren 18 Июн 2010 в 01:34
import itertools as it

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

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

2
Alex Martelli 18 Июн 2010 в 03:54