既存の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