Python如何结合字典items()方法与if条件编写for循环?
语法规则差异
普通for循环和推导式的语法规则完全独立,这是你之前的写法失效的核心原因:
- 列表推导式的语法原生支持「遍历可迭代对象后直接拼接if过滤条件」,因此你写的列表推导代码可以正常运行。
- 普通for循环的固定语法结构为
for 目标变量 in 可迭代对象: 循环体,在可迭代对象与行尾冒号之间没有预留if过滤条件的语法位,将if条件直接跟在.items()后方会直接触发SyntaxError,无法被解释器识别。
基于.items()的普通for循环过滤实现
无需退回到「仅遍历字典键、再通过键手动取值」的方案,有两种合规的实现方式:
循环体内加判断(最常用写法)
在循环体开头加入判断逻辑,不满足过滤规则时直接跳过本次遍历,全程保留.items()的直接解包用法:
test_dict = {'a':1,'b':2,'c':3} skip = ['b'] for key, item in test_dict.items(): if key in skip: continue print(key, item)
运行输出结果:
a 1 c 3
生成器表达式解耦过滤逻辑
如果希望将过滤逻辑和循环主体逻辑拆分,可以把带if判断的生成器表达式作为for循环的遍历源,写在in后方的括号内:
test_dict = {'a':1,'b':2,'c':3} skip = ['b'] for key, item in (pair for pair in test_dict.items() if pair[0] not in skip): print(key, item)
该写法中的if属于生成器表达式的专属语法,并非普通for循环头部的语法,完全符合Python语法规则,不会触发报错。
内容的提问来源于stack exchange,提问作者Finn
相关产品推荐
相关产品推荐

