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