字典的问题,以便对该类的每个对象进行分类

时间:2019-01-08 22:32:53

标签: python python-3.x class

我有一个字典,其键(节点)的值为儿子。我创建了一个类来获取该节点的父子,对字典进行迭代,并将这些变量的键保存为对象,并将其保存在另一个列表中。当我传递到一个子树时出现了问题,该子树需要与上一个节点的对象相同(例如另一个节点的子节点),以便在列表的每个对象中都具有树的完全独立性。当我明显地保存它时,它将另存为另一个对象。我该如何链接那些?就像检查是否已经存在具有该值的该类的对象,以便将该值放入变量并对其进行处理...也许我使逻辑背后的功能失败了(?)。

class Nodo():
    def __init__(self,value):
        self.val = value
        self.figli = []
        self.padre = None

d_i = {'2': ['3'], '1': ['2', '4'], '5': ['6'], '7': ['8', '9', '10'], 
'10': ['12'], '8': ['11']}
nodi = []

for k,v in d_i.items():
        nodo = Nodo(k)
        nodi.append(nodo)
        for figlio in v: 
            figlio = Nodo(figlio)
            nodo.figli.append(figlio)
            figlio.padre = nodo

输出应类似于:

a = '2'
a.figli = ['3']
a.padre = '1'
#all of that value should be type = Nodo

,依此类推... 但是正如我说的,我不会在每个柱子上都将儿子添加到相同的对象中。

1 个答案:

答案 0 :(得分:0)

您的主要问题是,您没有正确研究Python中现有的树和节点处理。特别是,您无法检查特定家庭成员是否已经具有现有节点。对于dict和 every 子级中的 every 节点,您将使用该名称创建一个新的独立节点。您需要您的类具有“查找此节点”方法,该方法将返回现有节点或新节点。

有了该功能,您的主程序即可使用返回的节点,并按指示添加子级。像这样:

class Nodo():
    roster = {}    # dict of all nodes by name

    def __init__(self,value):
        self.val = value
        self.figli = []
        self.padre = None
        Nodo.roster[value] = self

    def find(value):
        if value in Nodo.roster:   # Return the existing node.
            return Nodo.roster[value]
        else:                 # Make a new node and return that.
            return Nodo(value)

d_i = {'2': ['3'], '1': ['2', '4'], '5': ['6'], '7': ['8', '9', '10'], 
'10': ['12'], '8': ['11']}
nodi = []

for k,v in d_i.items():
        gen = Nodo(k)
        nodi.append(gen)
        for nome in v:
            figlio = Nodo.find(nome)
            gen.figli.append(figlio)
            figlio.padre = gen

这是否有助于您寻求解决方案?