Python遍历字典时多条件if判断失效原因及简化写法咨询
问题1:第一段代码异常运行的原因
Python中==运算符的优先级高于or运算符,你写的if name == 'Jim' or 'Anna' or 'Tim'实际会被解析为:
if (name == 'Jim') or ('Anna') or ('Tim')
而Python里非空字符串的布尔值恒为True,所以不管name取值是什么,整个条件判断的结果永远为True,所有名字都会被添加到Smith列表,Miller列表始终为空,自然不符合预期。
第二段代码你明确写了每次判断都和name比较,name == 'Jim' or name == 'Anna' or name == 'Tim'的逻辑完全符合你要匹配三个名字的需求,所以可以正常运行。
问题2:更简便的实现方式
推荐使用Python的成员运算符in简化多条件匹配逻辑,只需要把要匹配的目标值放到一个元组/集合里即可,代码可简化为:
d = {2312: 'Jim', 2323: 'Anna', 2314: 'Tim', 3054: 'Marc', 3574: 'Valerie', 3698: 'Nina'} target_names = {'Jim', 'Anna', 'Tim'} Smith = [name for name in d.values() if name in target_names] Miller = [name for name in d.values() if name not in target_names] print(Smith) print(Miller)
这种写法在匹配条件较多的时候优势更明显,不需要重复写大量or判断,可读性和维护性都更好。
内容的提问来源于stack exchange,提问作者PoPhoRmA
相关产品推荐
相关产品推荐

