我在Django models.py
文件中有一个非常简单的有向遍历图结构,它转换为以下两个Python类:
class Node(models.Model):
position = models.IntegerField() # from 1 to 3
name = models.CharField(max_length=255)
value = models.FloatField(default=0.0)
class Edge(models.Model):
source = models.ForeignKey("Node", related_name="__to")
destination = models.ForeignKey("Node", related_name="__from")
weight = models.FloatField(default=0.0)
我需要将该树的内容转储到Excel文件中。 xlwt 可以轻松写入Excel文档 - 我可以使用简单的write(x, y, content)
函数写入任何单元格 - 但我现在遇到的困难是通过整个树(递归地)并获取每个可能的路径以在Excel文件中写入。
考虑到我在第一个位置有3个节点(A1,A2,A3),每个节点都链接到第二个位置的一个节点(B1),最终链接到第三个位置的1个节点(C1),我会需要遍历所有可能的路径并将其转换为Excel中的以下结构(仅供您理解,但它实际上是Excel中的单独单元格):
Node A1 in position 1 <links to> Node B1 in position 2 <links to> Node C1 in position 3
Node A2 in position 1 <links to> Node B1 in position 2 <links to> Node C1 in position 3
Node A3 in position 1 <links to> Node B1 in position 2 <links to> Node C1 in position 3
在前面提到的示例中,我有5个Node
个实例和5个Edge
个实例。
关于如何做到这一点的任何想法?
谢谢! Ĵ
答案 0 :(得分:0)
严格地说,这是directed graph遍历而不是有向树。
一种简单的算法,忽略edges
但基于position
,并给出期望输出:
>>> positions = [Node.objects.filter(position=i) for i in range(1,3+1)]
>>> import itertools
>>> list(itertools.product(positions))
[(<Node: A1>, <Node: B1>, <Node: C1>),
(<Node: A2>, <Node: B1>, <Node: C1>),
(<Node: A3>, <Node: B1>, <Node: C1>)]