You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:如何为扁平嵌套结构列表生成层级索引字符串?

实现扁平嵌套路径的层级索引生成

核心思路

用一个字典跟踪每个父路径对应的下一个子节点序号,确保同层级节点按输入顺序递增编号。对每个路径拆分层级后,从根节点开始逐层推导当前节点的序号,最终拼接成要求的索引字符串。

具体步骤

  • 初始化计数字典:用空字符串代表根节点的父路径,初始计数设为1(根节点序号从1开始)。
  • 逐个处理路径:
    1. 把当前路径按/拆分成层级列表,比如apple/dog/banana拆成['apple', 'dog', 'banana']。
    2. 从根节点开始,逐步构建父路径:处理第一个层级时父路径是空字符串;处理后续层级时,父路径是前n个层级拼接成的完整路径。
    3. 从计数字典中取出父路径对应的当前序号,将其加入当前索引的列表中,随后把父路径的计数加1(供下一个同层级节点使用)。
    4. 把当前节点的完整路径加入计数字典(若尚未存在),初始计数设为1,方便它的子节点调用。
  • 收集结果:把每个路径的层级序号用.拼接成字符串,存入结果列表。

代码示例(Python)

def generate_indexes(paths):
    counter = {'': 1}  # 空字符串对应根节点的父路径,初始序号从1开始
    indexes = []
    for path in paths:
        parts = path.split('/')
        current_index_parts = []
        parent_path = ''
        for part in parts:
            # 获取当前层级的序号
            current_seq = counter[parent_path]
            current_index_parts.append(str(current_seq))
            # 更新父路径的计数,下一个同层级节点序号+1
            counter[parent_path] += 1
            # 构建当前节点的完整路径,作为下一级的父路径
            parent_path = f"{parent_path}/{part}" if parent_path else part
            # 初始化当前节点的子节点计数(如果还没初始化)
            if parent_path not in counter:
                counter[parent_path] = 1
        # 拼接成最终的索引字符串
        indexes.append('.'.join(current_index_parts))
    return indexes

# 测试示例输入
input_paths = ['apple', 'apple/dog', 'apple/dog/banana', 'apple/dog/apple', 'apple/cat', 'cold', 'cold/banana']
print(generate_indexes(input_paths))
# 输出结果:['1', '1.1', '1.1.1', '1.1.2', '1.2', '2', '2.1']

注意事项

  • 输入列表必须保证父路径出现在子路径之前,比如apple必须在apple/dog前面,否则会因为父路径不在计数字典里抛出KeyError。如果要处理乱序的输入,可以先按路径的层级长度(split('/')后的元素个数)从小到大排序,再进行处理。
  • 路径里的层级名称不影响索引生成,只按输入顺序计数。

内容的提问来源于stack exchange,提问作者Kspr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:55:15