构建树:如何在python中格式化父级和子级列表

时间:2019-12-01 16:35:04

标签: python list tree

我需要更改树形结构的列表格式,在该结构中,父级可以有多个子级(而不是二叉树)。

我树中的每个节点都遵循以下结构:[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]]]

谢谢。

1 个答案:

答案 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])