在现有的Python脚本中,我使用vivification工作词典词典。更改词典词典中的每个词典的类型
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'字典吗? –
此外,'upvivification'函数是否在'AutoVivification'类或其外部? –
是的,它是更新作为参数传递的dico。 – servoz