Python的treelib构建多叉树——快速命名节点id

本文介绍了如何使用Python的treelib库构建多叉树,并确保节点id的唯一性。通过跟踪节点出现次数的字典以及临时路径,当遇到重复子树时,确定正确的节点归属,避免命名冲突。
摘要由CSDN通过智能技术生成

思想就是:为保证多叉树节点的唯一性,主要就是根据嵌套list,构建对应的节点id
首先,将嵌套list的第一个list元素,作为第一个list的元素节点的id ;
其次,为了保证节点的命名不重复,建立一个字典来统计各个节点的出现次数 ;
若有同一棵树上不在路径的子树相同,怎么知道将该字数放到哪个节点下面呢?
很简单,就是建立临时path,从当前list的第一个元素与之前的list相同位置元素进行比较,若第一个元素相同,则将对应的list抽出放到path,当前list节点命名与path中的同位置相同元素一样,若不同,则将id命名为该元素与其当前计数的拼接str。

def encoding_tree_node_id(temps):
    # first template的值直接作为其id
    temps_id = [temps[0]]
    # 构建一个id计数器以对其节点id进行命名
    id_count_dict = dict(zip(temps_id[0],[1]*len(temps_id[0])))
    # Template总数
    len_temps = len(temps)
    # encoding id begin
    for i in range(1,len_temps):
        temp_path = [] # 将符合条件的temp存入临时path
        temp_path_loc = [] # 记录临时path在原始temps中的位置
        len_current_list = len(temps[i])
        for xi in temps[i]:
            if xi in id_count_dict.keys():
                id_count_dict[xi] = id_count_dict[xi] + 1
            else:
                id_count_dict[xi] = 1
        for k in range(len_current_list):
            if k == 0:
                for j in range(i):
                    if temps[i][k
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值