[
{
"name": "Basic",
"id": "home",
"childrens": [
{
"name": "Dashboard",
"viewtype": "custom",
"view": "dashboard.html",
"childrens": []
},
{
"name": "DeviceInfo",
"href": "WSettings",
"childrens": [
{
"name": "DeviceInfo Form",
"childrens": [
{
"name": "DeviceInfo Form1",
"viewtype": "xml",
"view": "dinfo",
"childrens": []
},
{
"name": "DeviceInfo Form2",
"viewtype": "xml",
"view": "complexjson",
"childrens": []
}
]
},
{
"name": "DeviceInfo Table",
"childrens": [
{
"name": "DeviceInfo Table1",
"viewtype": "xml",
"view": "dinfotable",
"childrens": []
},
{
"name": "DeviceInfo Table2",
"viewtype": "xml",
"view": "jsontable",
"childrens": []
}
]
}
]
},
{
"name": "Hybrid",
"childrens": [
{
"name": "Table-Form",
"viewtype": "xml",
"view": "hybrid",
"childrens": []
}
]
}
]
},
{
"name": "Advanced",
"id": "profile",
"childrens": []
}
]
想要打印从根到叶的所有路径(一个空'孩子' )。 E.g Basic.DeviceInfo.DeviceInfo Form.DeviceInfo Form1
在 DeviceInfo Form2
之前一切正常对于 DeviceInfo表, DeviceInfo表单即将出现 - > Basic.DeviceInfo.DeviceInfo Form.DeviceInfo Table.DeviceInfo Table1。
这不应该发生。相反,我需要 Basic.DeviceInfo.DeviceInfo Table.DeviceInfo Table1。
我的代码出错了。任何解决方案?
def walk(list1, path = ""):
for dic in list1:
#print('about to walk', dic['name'], 'passing path -->', path)
if(len(dic['childrens']) == 0):
print('leaf --->', path+dic['name']+'.')
else:
path = path+dic['name']+'.'
#passing parent name to childreni
walk(dic['childrens'], path)
答案 0 :(得分:4)
您在else子句中设置了path = path +dic['name']+'.'
。一旦walk()
函数完成遍历DeviceInfoForm'childrens',它就会尝试遍历DeviceInfoTable。但是,您的函数已经设置了路径
Basic.DeviceInfo.DeviceInfoForm.
您需要重新组织您的函数,以便不在else:
语句中设置路径。也许
else:
walk(dic['childrens'], path+dic['name']+'.')
这样你就可以将正确的路径传递给函数,但是没有明确地设置它。