在現有的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