让我们考虑一下Python 3中的这个示例:
class SimpleObj:
def __init__(self, own_id: int, parent_id: int):
self.parent_id = parent_id
self.own_id = own_id
self.children_objects = [] # type: List[SimpleObj]
test_dict = {}
test_dict[0] = SimpleObj(own_id=0, parent_id=-1) # -1 will mean root node
test_dict[1] = SimpleObj(own_id=1, parent_id=0)
test_dict[123] = SimpleObj(own_id=123, parent_id=1)
test_dict[5] = SimpleObj(own_id=5, parent_id=123)
创建递归嵌套结构(例如SimpleObj with own_id=1
将其children_objects
列表填充一个元素,该元素将是SimpleObj with own_id=123
)的最python的方法是什么?
它闻起来很像二叉树问题,但我真的没有找到一个有效的解决办法,把这种字典变成一个树一样的对象结构
可能您可以创建一个小函数来处理新SimpleObj的创建:
这只是一个开始,但似乎成功了。您可以修改它来处理,例如,您尝试为已经存在的键重新创建SimpleObj的情况
经过反复研究,我想出了自己的解决办法。有两个主要的问题需要克服-递归和处理节点引用尚未出现的父母。这是我的解决办法。它尝试递归地将对象分配给它们的父对象,如果失败,它将创建一个孤立对象列表。然后,它遍历孤立节点列表,直到所有节点都就位。我在多个配置上进行了测试,它看起来总是可以工作的(只要输入正确,就意味着没有重复或循环引用等)
相关问题 更多 >
编程相关推荐