使用for循环创建Graphviz边

时间:2014-11-21 19:07:50

标签: python graphviz

以家谱为例:

grandparents = ['Frank', 'Kelly']
parent = ['John']
kids = ['Emily', 'Mary', 'Sue']

我明白我能做到:

dot.node('F', 'Frank')
dot.node('K', 'Kelly')
dot.node('J', 'John')
dot.node('E', 'Emily')
...
dot.edges(['FJ','KJ','JE',...])

输出的预期结构应该相当明显:

F -> J
K -> J
J -> E
J -> M
J -> S

但是我手动执行此操作需要包含太多元素,而我无法弄清楚如何将此工作与for循环结合使用。

1 个答案:

答案 0 :(得分:0)

在半伪代码中它看起来像(我假设你正在使用PyGraphviz或类似的东西。

for grandparent g

    Graph.add_node(g.id, g.name)

    for parent p

        Graph.add_node(p.id, p.name)
        Graph.add_edge(g.id, p.id)

        for kid k

            Graph.add_node(k.id, k.name)
            Graph.add_edge(p.id, k.id)

然后使用父母和孩子做同样的事情。您需要为每个名称定义唯一标识符(例如,F表示Frank)。 For循环不能很好地回归到一个家庭。为此,您需要使用树结构和递归。