gpt4 book ai didi

python - 无法从解析的字典中返回 "valid"字段

转载 作者:行者123 更新时间:2023-12-01 00:42:06 25 4
gpt4 key购买 nike

我有以下格式的 json:

myDict =
{
"Garden": {
"GroundFloor": {
"@loc": "porch",
"@myID": "35C",
"Tid": "1",
"InfoList": {
"status": {
"@default": "0",
"@myID": "20C"
},
"count": {
"@default": "0",
"@myID": "1"
}
}
},
"TopFloor": {
"@loc": "backyard",
"@myID": "35C",
"Tid": "2",
"InfoList": {
"status": {
"@default": "0",
"@myID": "20D"
},
"count": {
"@default": "0",
"@myID": "2"
}
}
}
},
"BackYard": {
"GroundFloor": {
"@loc": "porch",
"@myID": "35C",
"Tid": "3",
"InfoList": {
"status": {
"@default": "0",
"@myID": "20C"
},
"count": {
"@default": "0",
"@myID": "1"
}
}
},
"TopFloor": {
"@loc": "backyard",
"@myID": "35C",
"Tid": "4",
"InfoList": {
"status": {
"@default": "0",
"@myID": "20D"
},
"count": {
"@default": "0",
"@myID": "2"
}
}
}
},
... many more nested layers...
}

我将其存储到字典中并需要对此执行一些处理。

对于给定的“Tid”,我希望能够在“status”部分返回“@default”值。例如,如果我请求“Tid”= 1,我应该得到以下输出。

预期输出:

{ "Tid": "1",
"status": "0" -->this is the value from the @default attribute
}
# note that the "status" value is the attribute @default.

到目前为止,我有以下方法,但它返回给我这个,我不明白为什么。

{ "Tid": null,
"status": null
}

我的方法:

def get_system_state(myDict, id):
for i in ["id", "@default"]:
print (myDict.get(i))
if any(c == id_type for c in myDict.values()):
yield {i: myDict.get(i) for i in ["id", "@default"]}
else:
for i in myDict.values():
if isinstance(i, dict):
yield from get_system_state(i, id_type)

# Called by
get_system_state(myDict, 1)

如有任何帮助,我们将不胜感激。

最佳答案

您可以使用简单的递归:

data = {'Garden': {'GroundFloor': {'@loc': 'porch', '@myID': '35C', 'Tid': '1', 'InfoList': {'status': {'@default': '0', '@myID': '20C'}, 'count': {'@default': '0', '@myID': '1'}}}, 'TopFloor': {'@loc': 'backyard', '@myID': '35C', 'Tid': '2', 'InfoList': {'status': {'@default': '0', '@myID': '20D'}, 'count': {'@default': '0', '@myID': '2'}}}}, 'BackYard': {'GroundFloor': {'@loc': 'porch', '@myID': '35C', 'Tid': '3', 'InfoList': {'status': {'@default': '0', '@myID': '20C'}, 'count': {'@default': '0', '@myID': '1'}}}, 'TopFloor': {'@loc': 'backyard', '@myID': '35C', 'Tid': '4', 'InfoList': {'status': {'@default': '0', '@myID': '20D'}, 'count': {'@default': '0', '@myID': '2'}}}}}
def get_id(d, id):
if isinstance(d, dict) and d.get('Tid') == id:
yield {'Tid':d['Tid'], 'status':d['InfoList']['status']['@default']}
for i in getattr(d, 'values', lambda :[])():
yield from get_id(i, id)

print(list(get_id(data, '1')))

输出:

[{'Tid': '1', 'status': '0'}]

关于python - 无法从解析的字典中返回 "valid"字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57271156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com