如何将树形路径列表每一层级替换为专属唯一值,区分同名字段
路径层级唯一ID替换方案
实现思路
- 将每个路径按
/拆分,最后一段为文件名,前面的片段为各级节点 - 用字典存储节点映射:key为
(父节点唯一ID, 当前节点原始名称),保证不同层级、不同父节点下的同名节点对应不同key - 为每个新出现的节点分配全局唯一的ID,可使用自增整数、随机字符串等任意不重复的值
- 遍历所有路径,逐级替换节点为对应的唯一ID后重新拼接成新路径
代码实现
# 原始路径列表 xo = [ '1/sometext1', '1/1/sometext2', '1/1/1/sometext3', '1/1/2/sometext4', '1/2/sometext5', '1/2/1/sometext6', '1/2/2/sometext7', '2/sometext8', '3/sometext9' ] node_mapping = {} # 自增ID起始值,可根据需求调整,也可替换为随机字符串生成逻辑 current_unique_id = 1000 xd = [] for path in xo: segments = path.split('/') file_name = segments[-1] level_segments = segments[:-1] replaced_levels = [] parent_uid = '' for level_name in level_segments: # 用父节点ID + 当前节点原始名作为唯一key,区分不同位置的同名节点 node_key = (parent_uid, level_name) if node_key not in node_mapping: node_mapping[node_key] = str(current_unique_id) current_unique_id += 1 current_uid = node_mapping[node_key] replaced_levels.append(current_uid) parent_uid = current_uid new_path = '/'.join(replaced_levels + [file_name]) xd.append(new_path) # 输出结果 print(xd)
效果说明
上述代码运行后输出的xd列表中,所有层级节点都对应唯一ID,完全可以区分不同位置的同名节点。如果需要其他格式的唯一标识,只需替换current_unique_id自增逻辑为对应生成规则即可,只要保证每次生成的值不重复就能满足需求。
内容的提问来源于stack exchange,提问作者sharathchandramandadi
相关产品推荐
相关产品推荐

