是否可以在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):
...