У меня есть словарь 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]):
....
Если вы диктовали противоположное (Истина, если значение должно быть отсканировано), вы можете использовать:
for key in filter(d.get, keys):
...
import itertools as it
for key in it.ifilterfalse(d.get, keys):
...
itertools
часто предлагает лучшие способы упаковки функциональности в итерации (== циклы ;-).
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.