关于词典在分类每个对象的问题

2024-09-30 18:27:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dict,其中键(节点)的值是他的儿子。我创建了一个类来获取该节点的子节点和父节点,在dict上迭代,并将键作为对象保存在另一个列表中。当我传递到一个子树时,问题就出现了,这个子树必须是前一个节点的同一个对象(就像另一个节点的子节点),以便在列表的每个对象中都有树的完全独立性。当我明显地保存它时,它被保存为另一个对象。如何链接这些?就像检查是否已经有一个类的对象具有该值,以便在变量中获取该值并处理它。。。也许我不懂(?)背后的逻辑。你知道吗

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

等等。。。 但正如我所说的,我并不是每一次都在同一个物体上加儿子。你知道吗


Tags: 对象inself列表for节点valuedict
1条回答
网友
1楼 · 发布于 2024-09-30 18:27:43

您的主要问题是没有正确研究Python中现有的树和节点处理。尤其是,您无法检查某个特定的族成员是否已经有一个现有节点。对于dict中的每个节点和每个子节点,可以使用该名称创建一个新的独立节点。您需要您的类有一个“findthisnode”方法,该方法将返回现有节点或新节点。你知道吗

有了这个函数,主程序就可以简单地使用返回的节点,如图所示添加子节点。像这样:

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

这有助于你找到解决方案吗?你知道吗

相关问题 更多 >