Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更改字典字典中每个字典的类型_Python_Function_Dictionary_Scope - Fatal编程技术网

Python 更改字典字典中每个字典的类型

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)

在现有的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,并在递归调用中重新分配返回值:

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类之外哦,太棒了!!!!正是我想要的。。。我想我需要睡觉。。。非常感谢…哦,太好了!!!!正是我想要的。。。我想我需要睡觉。。。非常感谢…哦,太好了!!!!正是我想要的。。。我想我需要睡觉。。。非常感谢…哦,太好了!!!!正是我想要的。。。我想我需要睡觉。。。谢谢。。。。