Python递归字典转换为字符串

1 投票
1 回答
1257 浏览
提问于 2025-04-18 14:26

我遇到了一个问题,就是把有递归特性的字典转换成字符串。我有一个这样的路由映射:

urls = {
    '/' : 'BaseController.hello',
    '/api' : {
        '/auth' : {
            '/me' : 'ApiController.hello',
            '/login' : {
                '/guest' : 'ApiController.guest_login',
                '/member': 'ApiController.member_login'
            }
        }
    }
}

我需要做的是从这个映射生成一个字典,变成下面这样的:

url_map = {
    '/' : 'BaseController.hello',
    '/api/auth/me' : 'ApiController.hello',
    '/api/auth/login/guest' : 'ApiController.guest_login',
    '/api/auth/login/member': 'ApiController.member_login',
}

这个功能叫做路由分组,但我还没能写出一个函数来生成它。有没有什么想法?

1 个回答

4

你可以像这样递归地实现它

def flatten(current_dict, current_key, result_dict):

    # For every key in the dictionary
    for key in current_dict:
        # If the value is of type `dict`, then recurse with the value
        if isinstance(current_dict[key], dict):
            flatten(current_dict[key], current_key + key, result_dict)
        # Otherwise, add the element to the result
        else:
            result_dict[current_key + key] = current_dict[key]
    return result_dict

print flatten(urls, "", {})

输出结果

{
    '/api/auth/me': 'ApiController.hello',
    '/api/auth/login/guest': 'ApiController.guest_login',
    '/': 'BaseController.hello',
    '/api/auth/login/member': 'ApiController.member_login'
}

撰写回答