如何从此词典中删除data
密钥并将其转换为此密钥
递归使用python函数?
request = {"data":{"a":[{"data": {"b": {"data": {"c": "d"}}}}]}}
response = {"a": [{"b":{"c": "d"}}]}
答案 0 :(得分:1)
是的,你可以递归地执行此操作,如果你只有列表和词典,那么这非常简单。测试对象类型和容器,递归:
if type(r) is int or type(r) is float
就个人而言,我喜欢使用the @functools.singledispatch()
decorator来创建每个类型的函数来执行相同的工作:
def unwrap_data(obj):
if isinstance(obj, dict):
if 'data' in obj:
obj = obj['data']
return {key: unwrap_data(value) for key, value in obj.items()}
if isinstance(obj, list):
return [unwrap_data(value) for value in obj]
return obj
这使得稍后添加其他类型更容易处理。
演示:
from functools import singledispatch
@singledispatch
def unwrap_data(obj):
return obj
@unwrap_data.register(dict)
def _handle_dict(obj):
if 'data' in obj:
obj = obj['data']
return {key: unwrap_data(value) for key, value in obj.items()}
@unwrap_data.register(list)
def _handle_list(obj):
return [unwrap_data(value) for value in obj]