Ara*_*eel 1 python dictionary rename key
我想要一个嵌套字典并将所有键从camelcase重命名为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])', r'\1_\2', 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)
Run Code Online (Sandbox Code Playgroud)
据我了解您所问的问题,我认为有两个问题在起作用。首先,您无法dict
在迭代时更改 a 的大小(dictionary.pop
当您创建并返回单独的 dict 时,我看不到 the 的目的empty
)。其次,您需要使用递归情况下的返回值来 update empty
,因为递归调用不会dictionary
因更改的键而改变自身。这是修改后的代码:
def camel_to_snake(name):
name = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
return re.sub('([a-z0-9])([A-Z])', r'\1_\2', name).lower()
def alter_keys(dictionary, func):
empty = {}
for k, v in dictionary.items():
if isinstance(v, dict):
empty[func(k)] = alter_keys(v, func)
if isinstance(v, str):
empty[func(k)] = v
return empty
Run Code Online (Sandbox Code Playgroud)