本文共 2080 字,大约阅读时间需要 6 分钟。
今天有个需求是要把一个地址树转成多层嵌套的字典,写入json文件,方便测试同学了解地址树的结构,知道应该用递归,但还是折腾了一会才搞定。
代码如下:
#原始字典tree_dict={}# tree_root是树的根节点def tree_to_dict(tree_root,tree_dict): # 如果节点没有子节点,递归结束 if not tree_root.children: return #下面是核心代码 #如果有子节点,在对子节点进行操作 for child in tree_root.children: # 如果tree_dict没有对应的节点地址键, #child.data的data对应的树节点的地址,比如河北省,北京市之类的, #那就给字典赋键值对,键就是data,值对应空字典 if not tree_dict.get(child.data): tree_dict[child.data] = {} # 继续对child递归,这里的关键是tree_dict要传入tree_dict[child.data], #也就是新的空字典,思想上就是不断的给字典赋值,赋的值仍然是字典,直至结束 tree_to_dict(child, tree_dict[child.data]) else: #如果tree_dict有对应的节点地址键,直接继续递归 tree_to_dict(child,tree_dict[child.data])tree_to_dict(test_tree.root,tree_dict)将最终的tree_dict写入json文件,with open('test_tree.json','w') as f: #利用json.dumps拍好字典的层级格式 f.write(json.dumps(tree_dict,ensure_ascii=False,indent=4))
最终看看json文件的结构效果展示
"永丰乡": { "花石头": { "清真寺": { "大门": { "侧": {} }, "内": { "球机": {} }, "餐厅": { "西": {} }, "二": { "殿": {} }, "后院": {}, "外": { "球机": {} } } }, "农机站": { "门前": { "云台": { "甘沟乡": { "西白杨沟": { "小学": { "教学楼": { "二楼": { "楼梯": {} } } } } } } } }, "林场": { "清真寺": { "外": { "枪机": {} } } }, "永胜": { "4队": { "云台": {} } },
转载地址:http://cdxws.baihongyu.com/