Python 3.6递归实现JSON字典嵌套与扁平化展示求助
解决嵌套字典展示与扁平化的递归实现方案
嘿,我来帮你搞定这个问题!既然你是Python新手,我会尽量把代码解释得清楚些,完全用递归实现,不用任何第三方库,完美适配Python 3.6~
第一步:处理输入JSON并转为字典
你提供的JSON片段缺少外层大括号,先补全并转为Python字典:
import json # 补全合法的JSON字符串并转为字典 json_str = '{"level1_key1":"1", "level1_key2":{ "level2_key1":"2", "level2_key2":{ "level3_key1":"Max depth" } }}' nested_dict = json.loads(json_str)
第二步:展示嵌套字典
其实嵌套字典的展示非常简单,直接用repr()函数就能得到你需要的结构化输出(Python 3中字符串默认是Unicode,不会显示u前缀,但结构和你示例完全一致):
print(f"Nested dict: {repr(nested_dict)}")
输出效果:
Nested dict: {'level1_key1': '1', 'level1_key2': {'level2_key1': '2', 'level2_key2': {'level3_key1': 'Max depth'}}}
第三步:递归实现字典扁平化
下面是核心的递归函数,专门用来把嵌套字典扁平化,把所有层级的键都提取到顶层:
def flatten_dict(input_dict): # 初始化空字典存储扁平化结果 flattened_result = {} for key, value in input_dict.items(): # 如果当前值是字典,递归处理子字典 if isinstance(value, dict): # 把递归返回的子字典结果合并到主结果中 flattened_result.update(flatten_dict(value)) else: # 如果不是字典,直接将键值对加入结果 flattened_result[key] = value return flattened_result # 生成扁平化字典并打印 flattened_dict = flatten_dict(nested_dict) print(f"Flatten dict: {repr(flattened_dict)}")
输出效果:
Flatten dict: {'level1_key1': '1', 'level2_key1': '2', 'level3_key1': 'Max depth'}
递归函数的工作逻辑
- 每次调用函数时,先创建一个空字典用来存储当前层级的扁平化结果
- 遍历输入字典的每个键值对:
- 如果值是字典,就递归调用自身处理这个子字典,再把返回的结果合并到当前结果里
- 如果值不是字典,直接把这个键值对加入结果字典
- 最后返回整理好的扁平化字典
内容的提问来源于stack exchange,提问作者Aktan A.
相关产品推荐
相关产品推荐

