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

如何基于配置深度动态生成嵌套for循环与目标字典?

动态生成对应深度的嵌套字典扁平化实现方法

方案1:递归遍历(推荐)

不用动态生成推导式代码,直接通过递归遍历所有嵌套层级,自动收集键路径与对应值,适配任意嵌套深度,无需提前指定循环变量。

代码示例:

def flatten_nested_dict(nested_dict, prefix=()):
    result = {}
    if isinstance(nested_dict, dict):
        for key, value in nested_dict.items():
            result.update(flatten_nested_dict(value, prefix + (key,)))
    else:
        result[prefix] = nested_dict
    return result

# 使用示例
config = {
    "content": {
        "a": {"x": 1, "y": 2},
        "b": {"z": 3}
    }
}

flattened = flatten_nested_dict(config["content"])
print(flattened)
# 输出:{('a', 'x'): 1, ('a', 'y'): 2, ('b', 'z'): 3}

方案2:动态生成字典推导式(慎用)

如果必须通过动态生成推导式的方式实现,可以通过字符串拼接生成代码,再用exec执行。注意:此方法存在代码注入风险,仅在输入完全可信的场景下使用。

代码示例:

def generate_flatten_dict(config, loop_vars):
    # 构建键路径元组字符串
    key_tuple = "(" + ",".join(loop_vars) + ")"
    # 构建取值表达式
    access_expr = "config['content']"
    for var in loop_vars:
        access_expr += f"[{var}]"
    # 构建循环语句部分
    loops = []
    current_level = "config['content']"
    for var in loop_vars:
        loops.append(f"for {var} in {current_level}.keys()")
        current_level += f"[{var}]"
    # 拼接完整推导式
    dict_comp_str = f"{{{key_tuple}: {access_expr} {' '.join(loops)}}}"
    # 执行并返回结果
    local_vars = {"config": config}
    exec(f"result = {dict_comp_str}", globals(), local_vars)
    return local_vars["result"]

# 使用示例
config = {
    "content": {
        "a": {"x": 1, "y": 2},
        "b": {"z": 3}
    }
}

# 指定循环变量列表,长度对应嵌套深度
flattened = generate_flatten_dict(config, ["i", "j", "k"])
print(flattened)
# 输出:{('a', 'x'): 1, ('a', 'y'): 2, ('b', 'z'): 3}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:40:30