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

如何在Python中将嵌套列表转换为字典?附层级展示需求

问题分析

你的输入嵌套列表有明确的层级对应规律:

  • 第一层第1个元素:根节点([[root]] 提取出root)
  • 第一层第2个元素:根节点的直接子节点([[part1, part2, part3]] 提取出三个节点)
  • 第一层第3个元素:每个直接子节点对应的子节点列表(空列表表示该节点无后代,非空列表则是对应节点的子节点)
  • 更深层级的结构遵循同样的对应逻辑:第n层的子节点组,对应上一层第n个节点的后代

基于这个规律,下面提供两种实现方案,均支持处理任意深度和规模的嵌套列表。


方法一:转换为嵌套字典

用递归实现列表到嵌套字典的转换,代码如下:

def list_to_nested_dict(nested_list):
    # 提取当前层根节点
    root = nested_list[0][0][0]
    # 提取当前层的子节点列表
    current_children = nested_list[1][0]
    # 提取子节点对应的后代组
    child_groups = nested_list[2] if len(nested_list) >= 3 else []
    
    # 初始化当前层字典
    result = {root: {}}
    current_dict = result[root]
    
    # 遍历每个子节点及其对应后代组
    for idx, child in enumerate(current_children):
        if idx < len(child_groups) and child_groups[idx]:
            # 构造子节点的嵌套列表结构,递归处理更深层级
            sub_list = [[[child]], [child_groups[idx]], nested_list[3:]] if len(nested_list) > 3 else [[[child]], [child_groups[idx]], []]
            current_dict.update(list_to_nested_dict(sub_list))
        else:
            current_dict[child] = {}
    
    return result

# 测试示例输入
input_list = [[["root"]], [["part1", "part2", "part3"]], [[], ["part1 of part2", "part2 of part2"], ["part1 of part3"]]]
output_dict = list_to_nested_dict(input_list)
print(output_dict)

转换后的字典结构:

{
    'root': {
        'part1': {},
        'part2': {
            'part1 of part2': {},
            'part2 of part2': {}
        },
        'part3': {
            'part1 of part3': {}
        }
    }
}

方法二:直接生成层级展示文本

如果不需要字典,可直接递归生成带缩进的层级文本,效率更高:

def print_hierarchy(nested_list, indent=0):
    # 提取当前层根节点并打印
    root = nested_list[0][0][0]
    print("    " * indent + root)
    
    # 提取当前层子节点及对应后代组
    current_children = nested_list[1][0]
    child_groups = nested_list[2] if len(nested_list) >= 3 else []
    
    # 遍历处理每个子节点
    for idx, child in enumerate(current_children):
        if idx < len(child_groups) and child_groups[idx]:
            # 构造子节点的嵌套列表,递归打印更深层级
            sub_list = [[[child]], [child_groups[idx]], nested_list[3:]] if len(nested_list) > 3 else [[[child]], [child_groups[idx]], []]
            print_hierarchy(sub_list, indent + 1)
        else:
            # 无后代直接打印子节点
            print("    " * (indent + 1) + child)

# 测试示例输入
input_list = [[["root"]], [["part1", "part2", "part3"]], [[], ["part1 of part2", "part2 of part2"], ["part1 of part3"]]]
print_hierarchy(input_list)

运行后输出:

root
    part1
    part2
        part1 of part2
        part2 of part2
    part3
        part1 of part3

注意事项

  • 代码默认输入列表结构为[[[根节点]], [[当前层子节点列表]], [每个子节点对应的后代组], ...],若结构有变动,需微调递归时的列表切片逻辑。
  • 针对超大规模列表,递归可能触发栈溢出,可将递归逻辑改为迭代实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:07:43