You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于属性提取嵌套字典指定子字典的问题排查求助

修复递归函数,正确提取目标子字典

嘿,问题出在你递归函数里的这一行:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:12:15