简体   繁体   English

python递归字典转换为字符串

[英]python recursive dictionary converting to strings

I had a problem on converting dictionaries to strings which has recursive features. 我在将字典转换为具有递归功能的字符串时遇到问题。 I had a map of routing such as the following; 我有一个如下的路由图;

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

What I need to do is to generate a dictionary from that into the following; 我需要做的是从中生成一个字典到以下内容;

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

This feature is called route grouping but I haven't been able to write a function to generate that. 此功能称为路由分组,但我无法编写函数来生成该功能。 Any ideas ? 有任何想法吗 ?

You can recursively do it like this 您可以像这样递归地执行此操作

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, "", {})

Output 输出量

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM