是否可以在python中为循环赋值?

是否可以在python中为循环赋值?,python,syntactic-sugar,Python,Syntactic Sugar,我有一本字典d(还有一个单独的键排序列表,键)。我希望循环只处理值为False的条目-因此我尝试了以下方法: for key in keys and not d[key]: #do foo 我想我对PythonSytax的理解和我想象的不一样——因为上面的赋值不应该发生,而且我得到了一个实例化错误 下面的代码当然有用,但我真的希望能够使用上面的代码。。可能吗 for key in keys: if d[key]: continue #foo time! 谢谢 为此使用genex fo

我有一本字典
d
(还有一个单独的键排序列表,
)。我希望循环只处理值为
False
的条目-因此我尝试了以下方法:

for key in keys and not d[key]:
 #do foo
我想我对PythonSytax的理解和我想象的不一样——因为上面的赋值不应该发生,而且我得到了一个实例化错误

下面的代码当然有用,但我真的希望能够使用上面的代码。。可能吗

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

为此使用genex

for key in (k for k in keys if not d[k]):
   ....
如果dict相反(如果应扫描值,则为True),则可以使用:

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

itertools
通常提供将功能打包到迭代(=循环;-)中的最佳方法。

从问题来看,我认为应该是“if not d[k]”。我不鼓励这样做,因为它并不比if cond:continue好多少,而且它不容易允许多个条件(此外,您正在为“酷”因子添加生成器表达式……是的,您可以这样做,但这既不会使代码更容易理解,也不会使代码更快(我假设它会使代码变慢))。您的解决方案确实是最明显、最漂亮的……您可以将其扩展到
过滤器(lambda x:not d[x],key)
对于假案例啊,这很酷-itertool每天都有新的礼物-谢谢Alex!
import itertools as it

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