如何将文件路径列表格式化为层级嵌套的级联列表
实现方案
实现思路
- 路径拆分:将所有输入路径按
/符号分割为层级数组,便于后续逐层级匹配 - 前缀树构建:用嵌套字典存储层级结构,相同父层级仅保留一份,避免重复输出上层节点
- 递归打印:遍历前缀树,每深入一层增加固定缩进,按嵌套列表格式输出节点内容
相比直接用zip对比层级的实现思路,前缀树方案逻辑更清晰,无需额外处理相邻路径的层级差异判断,也支持任意深度的路径嵌套,扩展性更强。
完整代码实现
def build_prefix_tree(paths): root = {} for path in paths: # 拆分路径为层级数组 parts = path.strip().split('/') current_node = root for part in parts: # 不存在的层级则新建节点 if part not in current_node: current_node[part] = {} current_node = current_node[part] return root def print_nested_list(node, indent_level=0): # 每层缩进用两个空格,可按需调整 indent = " " * indent_level for key in node: print(f"{indent}- {key}") # 递归打印子层级 print_nested_list(node[key], indent_level + 1) if __name__ == "__main__": # 示例路径列表 path_list = [ "Level_1A/Level_2A/Level_3A/item0001", "Level_1A/Level_2A/Level_3A/item0002", "Level_1A/Level_2A/Level_3B/item0003", "Level_1A/Level_2B/item0004", "Level_1A/Level_2C/Level_3C/item0005", "Level_1A/Level_2C/Level_3C/item0006", "Level_1B/Level_2D/Level_3D/Level_4A/item0007", "Level_1B/Level_2D/Level_3D/Level_4A/item0008", "Level_1B/Level_2E/Level_3E/item0009", ] tree = build_prefix_tree(path_list) print_nested_list(tree)
输出效果
- Level_1A - Level_2A - Level_3A - item0001 - item0002 - Level_3B - item0003 - Level_2B - item0004 - Level_2C - Level_3C - item0005 - item0006 - Level_1B - Level_2D - Level_3D - Level_4A - item0007 - item0008 - Level_2E - Level_3E - item0009
内容的提问来源于stack exchange,提问作者alebrann
相关产品推荐
相关产品推荐

