Python新手求助:如何扁平化字典列表?
Python字典列表扁平化实现
问题背景
我是一名Python新手,正在学习遍历列表和字典。现有如下字典列表:
process = [ { 'process1': [ {"subprocess1":["subprocess1_1","subprocess1_2"]}, "subprocess2", {"subprocess3":["subprocess3_1", "subprocess3_2"]}, "subprocess4", {"subprocess5":[{"subprocess5_1":["subprocess5_1_1","subprocess5_1_2"]}]}, ], }, { 'process2': [ "subprocess2_1" ] } ]
需要将其扁平化为如下形式:
process1 = ['subprocess1', 'subprocess1_1', 'subprocess1_2', 'subprocess2', 'subprocess3', 'subprocess3_1', 'subprocess3_2', 'subprocess4', 'subprocess5', 'subprocess5_1', 'subprocess5_1_1', 'subprocess5_1_2'] process2 = ['subprocess2_1']
解决方案
由于数据存在多层嵌套的字典和列表,用递归函数处理是最适配的方式。以下是实现代码:
def flatten_data(item, result=None): if result is None: result = [] # 处理字典:先添加键,再递归处理值 if isinstance(item, dict): for key, value in item.items(): result.append(key) flatten_data(value, result) # 处理列表:遍历每个元素递归处理 elif isinstance(item, list): for sub_item in item: flatten_data(sub_item, result) # 处理字符串:直接加入结果列表 elif isinstance(item, str): result.append(item) return result # 生成目标结果 output = {} for proc_dict in process: for proc_name, proc_content in proc_dict.items(): output[proc_name] = flatten_data(proc_content) # 按要求格式输出 print(f"process1 = {output['process1']}") print(f"process2 = {output['process2']}")
代码说明
flatten_data函数会递归遍历所有嵌套结构:- 遇到字典时,先把字典的键(比如
subprocess1)加入结果,再递归处理对应的值 - 遇到列表时,逐个遍历列表内的元素继续递归
- 遇到字符串(最终的叶子节点)时,直接添加到结果列表
- 遇到字典时,先把字典的键(比如
- 外层循环遍历原始的
process列表,提取每个顶层流程的名称(process1/process2),调用函数处理对应内容后存入output字典,最后输出符合要求的结果。
内容的提问来源于stack exchange,提问作者user1552698
相关产品推荐
相关产品推荐

