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

递归将嵌套字典转换为列表的列表时结果不符问题

递归转换嵌套字典为指定列表格式问题

原始嵌套字典

{
    "school_1": {
        "Class_1": {
            "Stud1": "Surname1",
            "Stud2": "Surname2"
        },
        "Class_2": {
            "Stud1": "Surname3",
            "Stud2": "Surname4"
        }
    },
    "school_2": {
        "Class_1": {
            "Stud1": "Surname5",
            "Stud2": "Surname6"
        },
        "Class_2": {
            "Stud1": "Surname7",
            "Stud2": "Surname8"
        }
    }
}

预期输出

[['Surname1', 'Surname2'],['Surname3', 'Surname4'],['Surname5', 'Surname6'],['Surname7', 'Surname8']]

现有错误代码

def dict_to_list(dict_to_list):
    list = []
    if isinstance(dict_to_list, dict):
        for k,v in dict_to_list.items():
            dict_to_list(v)
    else:
        list.append(dict_to_list)

    print(list)
    return list

实际错误输出

['Surname1']
['Surname2']
[]
['Surname3']
['Surname4']
[]
[]
['Surname5']
['Surname6']
[]
['Surname7']
['Surname8']
[]
[]
[]
[]

问题分析

原代码存在三个核心问题:

  1. 函数名与参数名重复(都叫dict_to_list),递归调用时引发混淆;
  2. 每次递归新建空列表,但未收集递归返回的结果,仅在遇到字符串时添加单个值;
  3. 未区分中间层字典和最内层字典,导致中间层处理后返回空列表,最终输出零散的单个值列表。

修正方案

方案一:通用递归版本(适配任意深度嵌套)

如果字典的嵌套层级可能变化,推荐使用递归方式:

def dict_to_list(input_dict):
    result = []
    for _, value in input_dict.items():
        if isinstance(value, dict):
            # 递归处理子字典,并收集返回的结果
            sub_results = dict_to_list(value)
            if sub_results:
                result.extend(sub_results)
        else:
            # 最内层:收集单个姓氏
            result.append(value)
    # 最内层字典处理完成后,返回包含该班级所有姓氏的列表;上层字典收集这些列表
    return [result] if all(isinstance(item, str) for item in result) else result

方案二:非递归版本(固定三层嵌套时更高效)

如果确定字典结构是学校->班级->学生固定三层,可以直接遍历提取:

def dict_to_list(input_dict):
    output = []
    # 遍历所有学校
    for school in input_dict.values():
        # 遍历学校下的所有班级
        for class_students in school.values():
            # 提取班级内所有学生的姓氏,转为列表并加入结果
            output.append(list(class_students.values()))
    return output

验证结果

调用修正后的函数,输入原始字典,将得到预期输出:

[['Surname1', 'Surname2'], ['Surname3', 'Surname4'], ['Surname5', 'Surname6'], ['Surname7', 'Surname8']]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:40:25