我需要更改树形结构的列表格式,在该结构中,父级可以有多个子级(而不是二叉树)。
我树中的每个节点都遵循以下结构:[my_id, my_parent_id]
我想要什么:
[my_id, my_parent_id, [my children, [my
grandchildren, [...]]]]
(我的孩子,孙子辈也是[my_id, my_parent_id]
的形式)
我可以制作一个程序来格式化,但是我想知道是否已经有任何方法可以这样做。
这是我的应用程序的输出:
[[0, 0], [1, 0], [2, 0], [3, 0], [4, 0], [5, 0], [6, 5]]
我想要的是:
[[0, 0, [1, 0], [2, 0], [3, 0], [4, 0], [5, 0, [6, 5]]]
谢谢。
答案 0 :(得分:1)
这里有一些代码可以生成您想要的东西。
首先从生成具有my_id/my_parent_id
结构的对象的任意列表开始,最后以仅parent
包含其余对象作为子代/孙代。
class Nim:
def __init__(self, my_id):
self.name = 'Bot'
self.my_id = my_id
self.parent = 0
self.children = []
def __repr__(self):
if self.children:
return str( (object.__repr__(self), self.name, self.my_id, self.parent, self.children) )[1:-1]
return str( (object.__repr__(self), self.name, self.my_id, self.parent) )[1:-1]
def generate_some_objects():
objects = [Nim(i) for i in range(7)]
objects[0].name = 'Human'
objects[6].name = 'Human'
objects[6].parent = objects[5].my_id
return objects
def find_parent(objects):
for nim in objects:
if nim.my_id == nim.parent:
return nim
def generate_hiearchy(objects):
indexed_objects = {nim.my_id:nim for nim in objects}
for nim in objects:
if nim.my_id != nim.parent:
my_parent = indexed_objects[nim.parent]
my_parent.children.append(nim)
objects = generate_some_objects()
print('ALL:', objects)
parent = find_parent(objects)
print('Parent:',parent)
generate_hiearchy(objects)
print('Parent:',[parent])