无法从嵌套字典中根据Tid获取status的@default值求解决
解决嵌套字典中根据Tid查找对应status默认值的问题
我看了你的代码和需求,发现几个关键问题导致返回结果不符合预期,咱们一步步来修正:
现有代码的问题分析
- 参数名不匹配:函数定义的参数是
id,但函数内部却用id_type来引用,调用时传入的参数和内部变量完全对应不上,这会直接导致目标值查找失败。 - 字段名错误:你要匹配的是字典里的
Tid字段,但代码里全程用"id"作为键来取值,字典里根本没有这个键,自然返回null。 - 匹配逻辑太宽泛:
any(c == id_type for c in myDict.values())这个判断会误匹配很多不相关的层级,应该精准检查当前字典是否包含Tid且其值等于目标值。 - 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
相关产品推荐
相关产品推荐

