如何高效编写嵌套字典非空判断与子值校验的精简代码?
优化嵌套字典的条件判断代码
嘿,我来帮你把这段嵌套字典的判断代码改得更简洁易读!
你原来的代码需要先检查父字典的键是否存在,再校验子键的值,现在可以通过链式调用get()方法把两个条件整合成一个condition_x,同时完美处理父键不存在的情况:
方法一:链式get()(兼容所有Python版本)
这种方法最简洁,利用get()的默认值参数,当父键不存在时返回空字典,避免了KeyError,同时直接完成值的校验:
parent_dict = {'parent_key': {'child_key': 'child_value'}} # 整合后的condition_x condition_x = parent_dict.get('parent_key', {}).get('child_key') == 'value_1' if condition_x: print('Value detected')
- 原理:第一个
get('parent_key', {})如果找不到parent_key,就返回空字典{}; - 接着第二个
get('child_key')从空字典取值会返回None,None == 'value_1'结果为False,正好符合“父键不存在时不执行打印”的需求; - 要是父键存在,就会正常取出子键的值和
'value_1'比较,满足条件就触发打印。
方法二:Python 3.10+ 用match-case(更直观的结构匹配)
如果你用的是Python 3.10及以上版本,还可以用match-case语法直接匹配字典结构,可读性拉满:
parent_dict = {'parent_key': {'child_key': 'child_value'}} match parent_dict.get('parent_key'): case {'child_key': 'value_1'}: print('Value detected') case _: pass # 其他情况什么都不做
这种写法直接“描述”了我们要匹配的结构,一眼就能看懂逻辑。
额外说明(如果需要父键不存在时返回None)
如果你的需求是让condition_x在父键不存在时返回None,而不是False,可以稍微调整:
condition_x = parent_dict.get('parent_key', {}).get('child_key') if 'parent_key' in parent_dict else None if condition_x == 'value_1': print('Value detected')
不过通常第一种方法已经能满足大部分场景,更简洁高效。
内容的提问来源于stack exchange,提问作者Outcast
相关产品推荐
相关产品推荐

