python递归字典转换为字符串

时间:2014-07-23 13:18:51

标签: python recursion dictionary

我在将字典转换为具有递归功能的字符串时遇到了问题。 我有一张路由图,如下所示;

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 个答案:

答案 0 :(得分: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'
}