Python:带有自变量的递归方法

时间:2018-08-01 19:02:37

标签: python-3.x dictionary recursion self

我在主类的外部编写了一个递归方法,以插入对象代替字符串。递归代码传递给列表,字符串和字典的嵌套字典(v)。

嵌套字典是根据JSON文件创建的。第二个参数UiClassList是与字典v中的字符串实例匹配的字符串列表。第三个参数(instanceList)包含QtDesigner模块main方法中的类对象,这些对象将字典v中的字符串替换为该对象。

现在,我想将递归代码(带有'self'变量)用作主类中的方法。

我的问题:鉴于主类包含self.UiClassList和self.instanceList,如何调用递归方法?作为self.print_dict()吗?字典v的属性正在更新(用对象替换字符串),因此我无法将 print_dict(v2,UiClassList,instanceList) 替换为 self.v() ,因为达到了最大递归深度。你能给些建议么?作为参考,独立算法会到达每个匹配的字符串,并将其替换为其对象。

def print_dict(v, UiClassList, instanceList ):

#recursively moves through dictionary v and replaces string instances
#of form Ui_menuName (from QtDesigner) which exist in a JSON file in the 
#first element of each list (next element may be a dictionary), with the 
#object representation of that Ui string

    if isinstance(v, dict):
        for k, v2 in v.items():
            if isinstance( v2, str ):
                indx = UiClassList.index( v2 )
                v2 = instanceList[indx]
            print_dict( v2, UiClassList, instanceList )
    elif isinstance(v, list):
        for k, v2 in enumerate(v):
            if isinstance( v2, dict ):
                for k, v3 in v2.items():
                    if isinstance( v3, str ):
                        indx = UiClassList.index( v3 )
                        v2[k] = instanceList[indx]                        
            print_dict(v2, UiClassList, instanceList )

0 个答案:

没有答案