python使用功能递归重命名字典键

问题描述

我想使用一个嵌套字典,并将所有密钥从驼峰式重命名为snake_case。我有当前代码,但无法正常工作。

def camel_to_snake(name):
    name = re.sub('(.)([A-Z][a-z]+)',r'\1_\2',name)
    return re.sub('([a-z0-9])([A-Z])',name).lower()

def alter_keys(dictionary,func):
    empty = {}
    for k,v in dictionary.items():
        if isinstance(v,dict):
            alter_keys(v,func)
        if isinstance(v,str):
            empty[func(k)] = dictionary.pop(k)
        
    return empty

x = alter_keys(random_nested_dict,camel_to_snake)

解决方法

据我了解,您在问,我认为有两个问题在起作用。首先,您无法在迭代过程中更改dict的大小(在创建并返回单独的字典{{1}时,我看不到dictionary.pop的用途})。其次,您需要在递归情况下使用返回值来更新empty,因为递归调用不会使用已更改的键来使empty本身发生突变。这是修改后的代码:

dictionary