Python 更改字典字典中每个字典的类型
在现有的python脚本中,我使用vivification来处理字典字典Python 更改字典字典中每个字典的类型,python,function,dictionary,scope,Python,Function,Dictionary,Scope,在现有的python脚本中,我使用vivification来处理字典字典 class AutoVivification(dict): """Implementation of perl's autovivification feature.""" def __init__(self, *args, **kwargs): super(AutoVivification, self).__init__(*args, **kwargs)
class AutoVivification(dict):
"""Implementation of perl's autovivification feature."""
def __init__(self, *args, **kwargs):
super(AutoVivification, self).__init__(*args, **kwargs)
self.vivify = True
self.root = self
def __getitem__(self, item):
try:
return dict.__getitem__(self, item)
except KeyError:
if not self.root.vivify:
raise
value = self[item] = type(self)()
value.root = self.root
return value
def unvivify(self):
self.vivify = False
def revivify(self):
self.vivify = True
def upgrade(self):
self.root = self
我想为字典字典中的每一本字典应用这个类。我这样想:
def upvivification(dico):
"""Upgrade to the last autovivification version."""
if isinstance(dico, dict):
dico = AutoVivification(dico)
for k in dico:
if isinstance(dico[k], dict):
upvivification(dico[k])
但是,事实上,它不起作用,因为这种变化的范围是在功能上,而不是全球性的。。。我不知道如何递归地进行此更改…只需在最后返回dico,并在递归调用中重新分配返回值:
def upvivification(dico):
if isinstance(dico, dict):
dico = AutoVivification(dico)
for k in dico:
if isinstance(dico[k], dict):
dico[k] = upvivification(dico[k])
return dico
然后使用类似于:
some_dict = upvivification(some_dict)
仅可以通过大幅度更改现有对象变体样式的
类型
。但是,您可以将旧变量重新分配给新对象。只需在最后返回dico,并在递归调用中重新分配返回值:
def upvivification(dico):
if isinstance(dico, dict):
dico = AutoVivification(dico)
for k in dico:
if isinstance(dico[k], dict):
dico[k] = upvivification(dico[k])
return dico
def upvivification(dico):
"""Upgrade to the last autovivification version."""
if isinstance(dico, dict):
dico = AutoVivification(dico)
for k in dico:
if isinstance(dico[k], dict):
dico[k] = upvivification(dico[k])
return deco
然后使用类似于:
some_dict = upvivification(some_dict)
仅可以通过大幅度更改现有对象变体样式的类型
。但是,您可以将旧变量重新分配给新对象
def upvivification(dico):
"""Upgrade to the last autovivification version."""
if isinstance(dico, dict):
dico = AutoVivification(dico)
for k in dico:
if isinstance(dico[k], dict):
dico[k] = upvivification(dico[k])
return deco
像这样使用它
new_dico = upvivification(dico)
像这样使用它
new_dico = upvivification(dico)
“此变更的范围在功能中”的变更是什么?您的意思是更新作为参数传递的dico吗?另外,
upvivification
函数是在autovification
类之内还是在它之外?是的,它是更新作为参数传递的dico。upvification函数在autovification类之外“此更改的范围在函数中”中的更改是什么?你的意思是更新作为参数传递的dico吗?另外,upvivification
函数是在autovification
类之内还是之外?是的,它是更新作为参数传递的dico。upvification函数在autovification类之外哦,太棒了!!!!正是我想要的。。。我想我需要睡觉。。。非常感谢…哦,太好了!!!!正是我想要的。。。我想我需要睡觉。。。非常感谢…哦,太好了!!!!正是我想要的。。。我想我需要睡觉。。。非常感谢…哦,太好了!!!!正是我想要的。。。我想我需要睡觉。。。谢谢。。。。