检查字典多个指定键值对是否匹配且不抛异常的最Pythonic方式是什么?
解决方案
最Pythonic的实现方式是使用字典内置的get()方法,键不存在时该方法不会抛出KeyError异常,直接组合判断即可:
# 针对3个固定条件的简洁写法 is_match = my_dict.get('a') == 'b' and my_dict.get('c') == 'd' and my_dict.get('e') == 'f'
如果后续可能新增判断条件,推荐更易扩展的写法:
# 可扩展的通用写法,新增条件只需修改check_list即可 check_list = [('a', 'b'), ('c', 'd'), ('e', 'f')] is_match = all(my_dict.get(k) == v for k, v in check_list)
实现原理
- 字典的
get(key, default)方法在目标键不存在时,会返回传入的默认值default,未传入default时默认返回None,None和任意非匹配值做相等判断都会返回False,完全符合需求 - 第二种写法配合内置函数
all()和生成器表达式,只要有一个条件不满足就会提前终止判断,性能损耗极低,同时可维护性更强
特殊场景兼容:如果你的字典中存在值为
None的合法数据,可以自定义一个全局唯一的哨兵对象作为get()的默认值,避免正常的None值被误判为键不存在:SENTINEL = object() is_match = all(my_dict.get(k, SENTINEL) == v for k, v in check_list)
内容的提问来源于stack exchange,提问作者Saqib Ali
相关产品推荐
相关产品推荐

