Python中如何通过键名列表动态查询嵌套JSON对象的对应值
实现方案
方法1:循环遍历实现(无第三方依赖,易调试)
逐次取出列表中的键,逐层访问字典即可,兼容任意长度的嵌套键列表:
a = {'s1':12134,'s2':{'s3':678,'s4':'blah','s5':'sample'}} l = ['s2','s3'] result = a for key in l: result = result[key] print(result) # 输出结果为678
如果需要处理键不存在的异常,避免抛出KeyError中断程序,可以加异常捕获逻辑:
result = a for key in l: try: result = result[key] except KeyError: result = None # 可替换为你需要的默认返回值 break
方法2:用functools.reduce实现简洁写法
适合写单行表达式的场景:
from functools import reduce import operator a = {'s1':12134,'s2':{'s3':678,'s4':'blah','s5':'sample'}} l = ['s2','s3'] result = reduce(operator.getitem, l, a) print(result) # 输出结果为678
也可以封装成通用工具函数,支持默认值返回:
def get_nested_value(data, keys, default=None): from functools import reduce import operator try: return reduce(operator.getitem, keys, data) except (KeyError, IndexError, TypeError): return default # 调用示例 print(get_nested_value(a, l)) # 678 print(get_nested_value(a, ['s2', 'not_exist_key'])) # None
内容的提问来源于stack exchange,提问作者codynuts
相关产品推荐
相关产品推荐

