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

如何拼接嵌套字典层级key 实现保留路径的字典扁平化

实现思路

你原代码存在两个核心问题:一是递归遍历嵌套字典时没有传递上层key的路径,二是赋值时误用了集合{key}作为字典键,不符合预期。修改思路如下:

  • 给extract_data方法增加parent_key参数,用于记录当前层级的父key拼接路径
  • 递归遍历子字典时,将当前层级key拼接到父路径后传入下一层
  • 根层级无父key,避免多余的下划线前缀

修改后完整代码

class Simple:
    def __init__(self):
        self.store_data = {}

    def extract_data(self, config, parent_key=''):
        for key in config:
            # 拼接当前完整key路径,父key为空时直接用当前key,否则用下划线连接
            current_key = f"{parent_key}_{key}" if parent_key else key
            if isinstance(config[key], dict):
                # 递归传入当前拼接的key作为下一层的父key
                self.extract_data(config[key], current_key)
            else:
                self.store_data[current_key] = config[key]
        return self.store_data

测试验证

# 测试输入(避免覆盖内置函数input,改用input_dict命名)
input_dict = {
    'k1_lv1': {
        'k1_lv2': 'v1_lv2', 'k2_lv2': 'v2_lv2'},
    'k2_lv1': 'v1_lv1',
    'k3_lv1': {
         'k1_lv2': 'v1_lv2', 'k2_lv2': 'v2_vl2'},
    'k4_lv1': 'v1_lv1',
}

s = Simple()
output = s.extract_data(input_dict)
print(output)

输出结果完全符合你的预期:

{
    'k1_lv1_k1_lv2': 'v1_lv2',
    'k1_lv1_k2_lv2': 'v2_lv2',
    'k2_lv1': 'v1_lv1',
    'k3_lv1_k1_lv2': 'v1_lv2',
    'k3_lv1_k2_lv2': 'v2_vl2',
    'k4_lv1': 'v1_lv1'
}

该实现天然支持任意深度的嵌套字典场景,如果你需要自定义分隔符,只需要把下划线替换为可配置的参数即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 15:06:05