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

无法从嵌套字典中根据Tid获取status的@default值求解决

解决嵌套字典中根据Tid查找对应status默认值的问题

我看了你的代码和需求,发现几个关键问题导致返回结果不符合预期,咱们一步步来修正:

现有代码的问题分析

  1. 参数名不匹配:函数定义的参数是id,但函数内部却用id_type来引用,调用时传入的参数和内部变量完全对应不上,这会直接导致目标值查找失败。
  2. 字段名错误:你要匹配的是字典里的Tid字段,但代码里全程用"id"作为键来取值,字典里根本没有这个键,自然返回null。
  3. 匹配逻辑太宽泛:any(c == id_type for c in myDict.values())这个判断会误匹配很多不相关的层级,应该精准检查当前字典是否包含Tid且其值等于目标值。
  4. status值的获取路径错误:@default是在InfoList -> status的嵌套路径里,你的代码直接从当前字典取@default,完全没走对正确的层级。

修正后的代码

def get_system_state(myDict, target_tid):
    # 精准检查当前字典是否是目标节点(包含Tid且值匹配)
    if myDict.get("Tid") == str(target_tid):
        # 从正确的嵌套路径取出status的@default值
        status_default = myDict.get("InfoList", {}).get("status", {}).get("@default")
        yield {"Tid": myDict["Tid"], "status": status_default}
    # 递归遍历所有嵌套的子字典
    for value in myDict.values():
        if isinstance(value, dict):
            yield from get_system_state(value, target_tid)

使用说明

  • 你的Tid值是字符串类型(比如示例里的"1"),函数里用str(target_tid)做了转换,兼容整数和字符串两种传参方式。
  • 调用时用next()获取第一个匹配结果(如果没有找到会返回None):
    # 查找Tid为1的节点
    result = next(get_system_state(myDict, 1), None)
    print(result)  # 输出: {"Tid": "1", "status": "0"}
    

验证结果

针对你给出的myDict片段,调用get_system_state(myDict, "1")会正确返回你预期的结果{"Tid": "1", "status": "0"}。

内容的提问来源于stack exchange,提问作者Laura Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:28:58