Python将树结构转换成字典形式的多级菜单结构,写入json文件

今天有个需求是要把一个地址树转成多层嵌套的字典,写入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队": {
                "云台": {}
            }
        },

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值