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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:05:27