如何在Python中将嵌套字典转为键用点(.)表示的扁平字典?
实现嵌套字典转扁平字典(键以点分隔)
需求说明
输入嵌套字典:
a = { "name": "a", "address": { "state": "b", "full": { "city": "c" } } }
期望输出扁平字典:
{ "name": "a", "address.state": "b", "address.full.city": "c" }
解决方案
用递归方式处理嵌套结构,遍历键值对时遇到子字典就递归拼接键名,直到遇到非字典值:
def flatten_dict(nested_dict, prefix=""): flat_dict = {} for key, value in nested_dict.items(): # 拼接当前层级的键名 current_key = f"{prefix}.{key}" if prefix else key if isinstance(value, dict): # 递归处理子字典并合并结果 flat_dict.update(flatten_dict(value, current_key)) else: # 非字典值直接加入扁平字典 flat_dict[current_key] = value return flat_dict # 测试示例 a = { "name": "a", "address": { "state": "b", "full": { "city": "c" } } } result = flatten_dict(a) print(result)
代码解释
- 函数
flatten_dict接收待处理的嵌套字典和当前键的前缀(默认空字符串对应顶层键)。 - 遍历每个键值对:
- 若值是字典,递归调用自身并传入拼接后的键作为新前缀,将递归返回的结果合并到当前字典。
- 若值不是字典,直接将拼接好的键和对应值加入结果字典。
- 最终返回完整的扁平字典。
运行代码后输出结果与期望一致:
{'name': 'a', 'address.state': 'b', 'address.full.city': 'c'}
内容的提问来源于stack exchange,提问作者Test User
相关产品推荐
相关产品推荐

