如何通过字符串路径获取嵌套字典中的指定值?
实现嵌套字典的路径取值函数my_func
当然可以实现这个功能!核心思路就是把传入的路径字符串拆分成层级节点列表,然后顺着嵌套字典的结构逐层遍历,最终定位到对应的值。下面是具体的实现方案,包含基础版和更实用的容错版:
基础实现(适配你的路径格式)
针对你用反斜杠\分隔层级的路径格式,我们可以这样写函数:
def my_func(d, path): # 拆分路径为层级列表,注意Python中单个反斜杠是转义字符,所以要处理成可识别的分隔符 levels = path.split('\\') current_node = d for level in levels: current_node = current_node[level] return current_node
测试你的示例
用你提供的字典测试一下,注意传入路径时的反斜杠处理(要么用双反斜杠,要么用原始字符串):
d = { "message": "...", "type": { "color": "...", "severity": "high" } } # 方式1:双反斜杠转义 print(my_func(d, 'type\\severity')) # 输出: 'high' # 方式2:原始字符串(更简洁) print(my_func(d, r'type\severity')) # 输出: 'high'
增强容错版(避免报错)
上面的基础版如果遇到不存在的路径,或者中途遇到非字典类型的节点,会直接抛出KeyError或TypeError。如果想要更健壮的实现,可以添加异常处理,返回默认值:
def my_func(d, path, default=None): levels = path.split('\\') current_node = d try: for level in levels: current_node = current_node[level] return current_node except (KeyError, TypeError): # 处理路径不存在、节点不是字典等异常情况 return default
容错测试示例
# 访问不存在的路径 print(my_func(d, 'type\\non_existent_key')) # 输出: None # 自定义默认提示 print(my_func(d, 'message\\color', default='指定路径不存在')) # 输出: '指定路径不存在'
小提示
如果之后你想改用其他分隔符(比如更常见的点.),只需要把split('\\')改成split('.'),就能适配'type.severity'这样的路径格式啦!
内容的提问来源于stack exchange,提问作者ehsan shirzadi
相关产品推荐
相关产品推荐

