Python字典操作

问题描述 投票:-6回答:1

如何从这个字典中删除data密钥并使用python函数递归转换为此?

request = {"data":{"a":[{"data": {"b": {"data": {"c": "d"}}}}]}}

response = {"a": [{"b":{"c": "d"}}]}
python dictionary
1个回答
1
投票

是的,你可以递归地执行此操作,如果你只有列表和词典,那么这是非常微不足道的。测试对象类型和容器,递归:

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

就个人而言,我喜欢使用the @functools.singledispatch() decorator创建每个类型的函数来做同样的工作:

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]

这使得稍后添加其他类型以便稍后处理变得容易一些。

演示:

>>> request = {"data":{"a":[{"data": {"b": {"data": {"c": "d"}}}}]}}
>>> unwrap_data(request)
{'a': [{'b': {'c': 'd'}}]}
© www.soinside.com 2019 - 2024. All rights reserved.