我有一个字典,其键(节点)的值为儿子。我创建了一个类来获取该节点的父子,对字典进行迭代,并将这些变量的键保存为对象,并将其保存在另一个列表中。当我传递到一个子树时出现了问题,该子树需要与上一个节点的对象相同(例如另一个节点的子节点),以便在列表的每个对象中都具有树的完全独立性。当我明显地保存它时,它将另存为另一个对象。我该如何链接那些?就像检查是否已经存在具有该值的该类的对象,以便将该值放入变量并对其进行处理...也许我使逻辑背后的功能失败了(?)。
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
,依此类推... 但是正如我说的,我不会在每个柱子上都将儿子添加到相同的对象中。
答案 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
这是否有助于您寻求解决方案?