如何在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
相关产品推荐
相关产品推荐

