如何将嵌套字典的内层键值对提取并追加到外层字典?
嵌套字典扁平化方案(适配Pandas DataFrame转换)
需求背景
在将API响应转换为Pandas DataFrame时,需要把嵌套字典扁平化——提取内层字典的键值对,用下划线拼接层级路径作为新键,合并成单层字典,这样就能直接转为DataFrame。没找到现成的适配方案,自己基于递归思路实现了一套,欢迎大家指出问题或提供已有解决方案。
输入示例
dict1 = {'outside_dict': {'middle_dict1': {'innerDict': 1}, 'middle_dict2' : 2},'innerDict': 3} dict2 = {'outside_dict': {'middle_dict1': {'innerDict': 1}, },}
输出示例
dict1 = {'innerDict': 3, 'middle_dict2_outside_dict': 2, 'innerDict_middle_dict1_outside_dict': 1} dict2 = {'innerDict_middle_dict1_outside_dict': 1}
实现代码
def flatten_dict(nested_dict, parent_key='', sep='_'): items = [] for k, v in nested_dict.items(): # 拼接当前键与父层级键,生成新键 new_key = f"{k}{sep}{parent_key}" if parent_key else k if isinstance(v, dict): # 递归处理内层字典 items.extend(flatten_dict(v, new_key, sep).items()) else: # 非字典值直接加入结果列表 items.append((new_key, v)) return dict(items)
代码逻辑说明
- 采用递归方式遍历所有层级的字典键值对
- 新键规则:当前键 + 下划线 + 父层级键(最外层无父键则直接用当前键)
- 遇到嵌套字典时继续递归拆解,直到拿到非字典类型的值
- 最终将所有键值对整理为单层字典
测试验证
dict1 = {'outside_dict': {'middle_dict1': {'innerDict': 1}, 'middle_dict2' : 2},'innerDict': 3} dict2 = {'outside_dict': {'middle_dict1': {'innerDict': 1}, },} print(flatten_dict(dict1)) # 输出: {'innerDict': 3, 'middle_dict2_outside_dict': 2, 'innerDict_middle_dict1_outside_dict': 1} print(flatten_dict(dict2)) # 输出: {'innerDict_middle_dict1_outside_dict': 1}
内容的提问来源于stack exchange,提问作者Callum
相关产品推荐
相关产品推荐

