Python中 for 循环中可以赋值吗?

2 投票
3 回答
742 浏览
提问于 2025-04-16 00:07

我有一个字典 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 个回答

2

如果你的字典是反过来的(也就是说,只有在值需要被扫描的时候才是True),你可以这样使用:

for key in filter(d.get, keys):
    ...
2
import itertools as it

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

itertools 通常提供了将功能打包到循环中的最佳方法。

5

用一个通用表达式来解决这个问题。

for key in (k for k in keys if not d[k]):
   ....

撰写回答