如何更改所有点.
下划线(在字典的键中),给定一个任意嵌套的字典?
我尝试的是编写两个循环,但随后我将仅限于两级嵌套字典。
This ...
{
"brown.muffins": 5,
"green.pear": 4,
"delicious.apples": {
"green.apples": 2
{
}
...应该变成:
{
"brown_muffins": 5,
"green_pear": 4,
"delicious_apples": {
"green_apples": 2
{
}
有优雅的方法吗?
你可以写一个递归函数,像这样
from collections.abc import Mapping
def rec_key_replace(obj):
if isinstance(obj, Mapping):
return {key.replace('.', '_'): rec_key_replace(val) for key, val in obj.items()}
return obj
当您使用问题中显示的字典调用此字典时,您将获得一本新字典,其中键中的点替换为_
s
{'delicious_apples': {'green_apples': 2}, 'green_pear': 4, 'brown_muffins': 5}
解释
这里,我们只是检查当前对象是否是一个实例dict
如果是,那么我们迭代字典,替换键并递归调用该函数。如果它实际上不是字典,则按原样返回。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)