如何编写函数从非对称嵌套且键唯一的字典中取值?
解决嵌套字典按键取值的问题
针对你提出的非对称嵌套字典(无重复键)取值需求,这里提供一个基于递归遍历的实现方案,无需依赖任何外部模块:
函数实现
def get_some_val(d, key): # 检查当前字典是否包含目标键 if key in d: return d[key] # 递归遍历所有嵌套字典 for val in d.values(): if isinstance(val, dict): found = get_some_val(val, key) if found is not None: return found # 未找到目标键时返回None,也可根据需求改为抛出KeyError return None
逻辑说明
- 当前层级检查:首先判断目标键是否存在于当前层级的字典中,存在则直接返回对应值
- 递归遍历嵌套:遍历当前字典的所有值,若值为字典类型,则递归调用函数继续查找
- 结果返回:递归过程中一旦找到目标键对应的值,立即返回;遍历完所有层级仍未找到则返回
None
测试示例
使用你提供的字典进行测试:
d = { 'd1': {'d11': 'a', 'd12': 'b'}, 'd2': {'d21': 'c', 'd22': {'d221': 'd', 'd222': 'e'}} } print(get_some_val(d, 'd221')) # 输出:d print(get_some_val(d, 'd12')) # 输出:b print(get_some_val(d, 'd2')) # 输出:{'d21': 'c', 'd22': {'d221': 'd', 'd222': 'e'}} print(get_some_val(d, 'test')) # 输出:None
关于exec方案的说明
不建议使用exec来实现该需求,原因如下:
- 安全风险:
exec会执行传入的字符串代码,若目标键包含恶意构造的内容,可能导致安全问题 - 维护性差:通过字符串拼接生成代码的方式,逻辑不直观,后期调试和修改难度大
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

