递归将嵌套字典转换为列表的列表时结果不符问题
递归转换嵌套字典为指定列表格式问题
原始嵌套字典
{ "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'] [] [] [] []
问题分析
原代码存在三个核心问题:
- 函数名与参数名重复(都叫
dict_to_list),递归调用时引发混淆; - 每次递归新建空列表,但未收集递归返回的结果,仅在遇到字符串时添加单个值;
- 未区分中间层字典和最内层字典,导致中间层处理后返回空列表,最终输出零散的单个值列表。
修正方案
方案一:通用递归版本(适配任意深度嵌套)
如果字典的嵌套层级可能变化,推荐使用递归方式:
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
相关产品推荐
相关产品推荐

