python将列表数据转换成树结构数据

将list数据转成dict格式的树结构

测试数据:

test_data = [
    {'id': 1, 'parent_id': 0, 'name': '学校'},
    {'id': 2, 'parent_id': 1, 'name': 'A校区'},
    {'id': 3, 'parent_id': 1, 'name': 'B校区'},
    {'id': 4, 'parent_id': 1, 'name': 'C校区'},
    {'id': 5, 'parent_id': 2, 'name': '小学'},
    {'id': 6, 'parent_id': 3, 'name': '初中'},
    {'id': 7, 'parent_id': 4, 'name': '高中'},
]

代码:

def list_to_tree(data_list, root, root_field, node_field):
    # 遍历列表,如果列表的parent_id等于主节点
    resp_list = [i for i in data_list if i.get(root_field) == root]
    # 2次遍历列表, 第一次遍历的列表拿到的 oid 等于 第二次的 parent_id
    for i in data_list:
        i['children'] = [j for j in data_list if i.get(node_field) == j.get(root_field)]
    return resp_list

结果:

[{'id': 1, 'parent_id': 0, 'name': '学校', 'children': [{'id': 2, 'parent_id': 1, 'name': 'A校区', 'children': [{'id': 5, 'parent_id': 2, 'name': '小学', 'children': []}]}, {'id': 3, 'parent_id': 1, 'name': 'B校区', 'children': [{'id': 6, 'parent_id': 3, 'name': '初中', 'children': []}]}, {'id': 4, 'parent_id': 1, 'name': 'C校区', 'children': [{'id': 7, 'parent_id': 4, 'name': '高中', 'children': []}]}]}]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值