Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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_Python 3.x_Class - Fatal编程技术网

Python 为了给它的每个对象分类,字典有问题

Python 为了给它的每个对象分类,字典有问题,python,python-3.x,class,Python,Python 3.x,Class,我有一个dict,其中键(节点)的值是他的儿子。我创建了一个类,以获取该节点的子节点和父节点,在dict上调用,并将这些键作为对象保存在另一个列表中。当我传递到一个子树时,问题就出现了,它必须是前一个节点的同一个对象(就像另一个节点的子节点),以便在列表的每个对象中都有树的完全独立性。当我明显地保存它时,它被保存为另一个对象。我如何链接这些?比如检查该类是否已经有一个对象具有该值,以便在变量中获取该值并处理它。。。也许我不符合(?)背后的逻辑 输出应如下所示: a = '2' a.figli =

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

输出应如下所示:

a = '2'
a.figli = ['3']
a.padre = '1'
#all of that value should be type = Nodo
等等。。。
但是正如我所说的,我并不是每个循环都向相同的对象添加son。

您的主要问题是没有正确研究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

这是否有助于您找到解决方案?

请添加一个解决方案。没有它很难理解你的问题。什么是野藤?包括完整的代码段欢迎使用StackOverflow。请按照您创建此帐户时的建议,阅读并遵循帮助文档中的发布指南。适用于这里。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。StackOverflow不是编码、评论或教程资源。我现在添加了缺少的部分…您的代码不会产生任何输出。。您的变量
a c g
在给定的程序中不存在。花名册是一个类变量?@SaltyGiampy jepmaybe
get\u或\u create
更适合作为
find
方法的命名。@Prune我可以指出您的解决方案的代码被破坏了吗?!是的,我的解释不太清楚,索维。无论如何,我想你忘了在方法中使用Nodo.lotster而不是lotster。现在我正在尝试,但它看起来很奇怪,因为如果我初始化一个对象,它将始终添加到花名册中。。。我不应该实现对构造函数的查找?
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