Python3如何将API返回的类字典格式列表转换为真实dict类型
Python3 处理第三方API返回的嵌套字典中列表包裹字典问题
核心实现逻辑
- 递归遍历嵌套字典的所有键值对
- 识别到值为列表类型时,判断列表内元素是否为字典结构,按业务规则转换为标准字典
1. 结构转换函数(输出转换后的标准字典)
调用该函数传入API返回的原始嵌套字典,会直接返回所有列表内字典都合并为标准键值对的新字典:
def convert_nested(dict_obj): result = {} for key, value in dict_obj.items(): if isinstance(value, dict): # 递归处理字典类型的值 result[key] = convert_nested(value) elif isinstance(value, list): # 处理列表类型的值 temp_dict = {} for item in value: if isinstance(item, dict): # 合并列表内的所有字典,同键默认后面的覆盖前面的,可按需调整规则 temp_dict.update(convert_nested(item)) # 若列表内没有可合并的字典,保留原列表 result[key] = temp_dict if temp_dict else value else: # 其他基础类型直接保留 result[key] = value return result
2. 改造后的打印函数(仅需打印场景用)
如果不需要修改原结构,只是要正确输出键:值格式的内容,可直接改造你现有的打印函数:
def print_nested(dict_obj): for key, value in dict_obj.items(): if isinstance(value, dict): print_nested(value) elif isinstance(value, list): for item in value: if isinstance(item, dict): print_nested(item) else: print(key, ':', item) else: print(key, ':', value)
测试示例
输入测试数据:
api_data = { "base": "option", "data": [ {"putCall": "CALL", "symbol": "MSFT_031723C250", "strike": 250} ] }
调用convert_nested(api_data)返回结果:
{ "base": "option", "data": {"putCall": "CALL", "symbol": "MSFT_031723C250", "strike": 250} }
调用改造后的print_nested(api_data)输出:
base : option putCall : CALL symbol : MSFT_031723C250 strike : 250
注意事项
- 如果列表内存在非字典类型的元素,函数会保留原元素不会强制转换
- 如果列表内有多个字典且存在相同键,默认会用后出现的键值覆盖先出现的,你可以根据业务需求修改合并规则,比如将同键的值保存为列表
内容的提问来源于stack exchange,提问作者Duncan
相关产品推荐
相关产品推荐

