如何在未知深度的嵌套字典中取值?附Python实现函数
从嵌套对象中动态取值的Python函数
处理嵌套字典或列表时,如果预先不知道目标值的嵌套深度,常规的链式取值写法就会失效。这里分享一个可以动态根据路径取值的函数,无需关注嵌套层级。
举个例子:
my_dict = {"People": [{"name": "Alice"}, {"name": "Bob"}]}
- 取"People"对应的值,常规写法是
my_dict["People"](路径长度1) - 取"Bob"所在的字典,常规写法是
my_dict["People"][1](路径长度2)
当你不确定路径长度时,这个get_nested_object函数就能派上用场。它接受两个参数:
data:待搜索的嵌套对象(字典或列表)path:列表格式的取值路径,比如取Bob的路径就是["People", 1]
函数代码
def get_nested_object(data: dict, path: list): # 取出路径中的第一个键/索引 key = path[0] # 处理字典类型 if isinstance(data, dict): if key in data: # 路径只剩最后一层,返回键值对 if len(path) == 1: return {key: data[key]} # 递归处理剩余路径 else: return get_nested_object(data[key], path[1:]) # 处理列表类型 elif isinstance(data, list): # 路径只剩最后一层,返回对应索引的元素 if len(path) == 1: return data[key] # 递归处理剩余路径 else: return get_nested_object(data[key], path[1:]) # 非字典/列表类型返回提示 else: return "Invalid data"
注意事项
该代码未包含数据验证和错误处理(比如路径不存在、索引越界等情况),使用时需要根据需求补充相关逻辑。
内容的提问来源于stack exchange,提问作者Daya Frenkiel
相关产品推荐
相关产品推荐

