如何基于子级标记python dict父级失败或通过
我有一个测试json报告,如果有任何失败的子节点,如何标记父节点失败,如果子节点全部通过,如何标记父节点通过 起初的如何基于子级标记python dict父级失败或通过,python,python-3.x,Python,Python 3.x,我有一个测试json报告,如果有任何失败的子节点,如何标记父节点失败,如果子节点全部通过,如何标记父节点通过 起初的 我必须将dict的原始dict转换为dict列表,因为没有空间添加新的结果键 期待 您可以创建两个函数:一个用于前瞻并确定用户是否失败,另一个用于遍历整个结构的主函数: def lookahead(d): if isinstance(d, str): return d == 'passed' if all('outcome' in b for b in d.va
我必须将dict的原始dict转换为dict列表,因为没有空间添加新的
结果
键
期待
您可以创建两个函数:一个用于前瞻并确定用户是否失败,另一个用于遍历整个结构的主函数:
def lookahead(d):
if isinstance(d, str):
return d == 'passed'
if all('outcome' in b for b in d.values()):
return all(b["outcome"] == "passed" for b in d.values())
return all(lookahead(b) for b in d.values())
def new_struct(d):
return [{'node_name':a, 'outcome':['failed', 'pass'][lookahead(b)] if isinstance(b, dict) and 'outcome' not in b else b['outcome'], 'children':[] if not isinstance(b, dict) or 'outcome' in b else new_struct(b)} for a, b in d.items()]
import json
d = {'scenario': {'server': {'testsuit_1': {'test_get': {'outcome': 'passed'}, 'test_set': {'outcome': 'failed'}}, 'testsui_2': {'test_get': {'outcome': 'passed'}, 'test_set': {'outcome': 'passed'}}}, 'client': {'test_receive': {'outcome': 'pass'}, 'test_send': {'outcome': 'fail'}}}}
print(json.dumps(new_struct(d), indent=4))
输出:
[
{
"node_name": "scenario",
"outcome": "failed",
"children": [
{
"node_name": "server",
"outcome": "failed",
"children": [
{
"node_name": "test_1",
"outcome": "failed",
"children": [
{
"node_name": "get",
"outcome": "passed",
"children": []
},
{
"node_name": "set",
"outcome": "failed",
"children": []
}
]
},
{
"node_name": "test_2",
"outcome": "pass",
"children": [
{
"node_name": "get",
"outcome": "passed",
"children": []
},
{
"node_name": "set",
"outcome": "passed",
"children": []
}
]
}
]
},
{
"node_name": "client",
"outcome": "failed",
"children": [
{
"node_name": "receive",
"outcome": "pass",
"children": []
},
{
"node_name": "send",
"outcome": "fail",
"children": []
}
]
}
]
}
]
您可以创建两个函数:一个用于前瞻并确定用户是否失败,另一个用于遍历整个结构的主函数:
def lookahead(d):
if isinstance(d, str):
return d == 'passed'
if all('outcome' in b for b in d.values()):
return all(b["outcome"] == "passed" for b in d.values())
return all(lookahead(b) for b in d.values())
def new_struct(d):
return [{'node_name':a, 'outcome':['failed', 'pass'][lookahead(b)] if isinstance(b, dict) and 'outcome' not in b else b['outcome'], 'children':[] if not isinstance(b, dict) or 'outcome' in b else new_struct(b)} for a, b in d.items()]
import json
d = {'scenario': {'server': {'testsuit_1': {'test_get': {'outcome': 'passed'}, 'test_set': {'outcome': 'failed'}}, 'testsui_2': {'test_get': {'outcome': 'passed'}, 'test_set': {'outcome': 'passed'}}}, 'client': {'test_receive': {'outcome': 'pass'}, 'test_send': {'outcome': 'fail'}}}}
print(json.dumps(new_struct(d), indent=4))
输出:
[
{
"node_name": "scenario",
"outcome": "failed",
"children": [
{
"node_name": "server",
"outcome": "failed",
"children": [
{
"node_name": "test_1",
"outcome": "failed",
"children": [
{
"node_name": "get",
"outcome": "passed",
"children": []
},
{
"node_name": "set",
"outcome": "failed",
"children": []
}
]
},
{
"node_name": "test_2",
"outcome": "pass",
"children": [
{
"node_name": "get",
"outcome": "passed",
"children": []
},
{
"node_name": "set",
"outcome": "passed",
"children": []
}
]
}
]
},
{
"node_name": "client",
"outcome": "failed",
"children": [
{
"node_name": "receive",
"outcome": "pass",
"children": []
},
{
"node_name": "send",
"outcome": "fail",
"children": []
}
]
}
]
}
]
很抱歉,我已经修复了这些错误,并且在你的新结构函数中有一个语法错误。感谢你help@ChwengMega一切都准备好了。很乐意帮忙!很抱歉,我已经修复了这些错误,并且在你的新结构函数中有一个语法错误。感谢你help@ChwengMega一切都准备好了。很乐意帮忙!