之前赶项目,在网上找了一个代码, 虽然是递归实现的代码,但是临时也是有很大帮助。
我这里做了一个非递归实现的代码, 这样资源用得少一点, 供大家参考。
def list_config(objs):
if not isinstance(objs, dict) or not isinstance(objs, dict):
return
cur_path = [] # 保存当前路径
obs = [[0, objs]] # 保存遍历的状态
cur_path.append(list(objs.keys())[0])
while len(obs) >0:
ob = obs.pop(-1)
obi, obt = ob
obk = list(obt.keys())
while obi < len(obt): # 一层字典遍历完成
sb = obt[obk[obi]] # 遍历子节点
obi += 1
# 更换 路径
cur_path.pop()
cur_path.append(obk[obi-1])
if isinstance(sb, dict): #如果子节点为字典,保存当前状态,遍历子节点
obs.append([obi, obt])
obi,obt = 0, sb
obk = list(obt.keys())
cur_path.append(obk[obi])
else:
print('dict: ', cur_path, sb)
# 子路径遍历完成,弹出
cur_path.pop()
if __name__ == '__main__':
objs = {
"aaaa":{"bbbb":"ccccc"},
"ddddd":["eeeee","fffff"],
}
list_config(objs)