基于属性提取嵌套字典指定子字典的问题排查求助
修复递归函数,正确提取目标子字典
嘿,问题出在你递归函数里的这一行:
result = get_parent_dict(child, reg) is not None
你把递归调用返回的字典(或者None)直接转换成了布尔值,所以当找到目标节点时,函数返回的是True而不是你想要的那个子字典。
修正后的函数
我们需要调整逻辑,直接保留递归调用的结果,只有当结果不为None时才返回它:
def get_parent_dict(dic, reg): # 先检查当前节点是否匹配目标属性 if dic['acronym'] == reg: return dic # 遍历所有子节点递归查找 for child in dic["children"]: result = get_parent_dict(child, reg) if result is not None: return result # 所有节点都检查完没找到,返回None return None
为什么这样改?
- 原来的代码中,
get_parent_dict(child, reg) is not None会把找到的目标字典转换成True,直接丢失了实际的字典数据。 - 修正后,我们直接获取递归调用的返回值:如果子节点里找到了目标,就把那个字典逐层返回上去;如果没找到,继续遍历下一个子节点,直到所有子节点都检查完才返回
None。
完整使用示例
结合你的JSON加载逻辑,完整代码应该是这样的:
import json def get_parent_dict(dic, reg): if dic['acronym'] == reg: return dic for child in dic["children"]: result = get_parent_dict(child, reg) if result is not None: return result return None # 加载JSON数据 json_path = "你的JSON文件路径.json" with open(json_path) as f: data = json.load(f) subdata = data['msg'][0] region_dict = get_parent_dict(subdata, "FRP") print(region_dict)
运行这段代码后,region_dict就会是你想要的包含FRP及其所有子项的字典啦~
内容的提问来源于stack exchange,提问作者Maryam Sadeghi
相关产品推荐
相关产品推荐

