gpt4 book ai didi

python - pygraphviz:如何在不迭代的情况下在不同端口上连接相同的边?

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:22 24 4
gpt4 key购买 nike

我使用 pygraphviz 生成以下图表:

graph "Multiport-Switches" {
node [color="#dddddd",
label="\N",
shape=record,
style=filled
];
Switch0 [label="<1> 1|<2> 2|<3> 3|<4> 4|<5> 5|<6> 6|<7> 7|<8> 8"];
Switch1 [label="<1> 1|<2> 2|<3> 3|<4> 4|<5> 5|<6> 6|<7> 7|<8> 8"];
Switch0:1 -- Switch1:1;
Switch0:2 -- Switch1:2;
Switch0:3 -- Switch1:3;
Switch0:4 -- Switch1:4;
Switch0:5 -- Switch1:5;
Switch0:6 -- Switch1:6;
Switch0:7 -- Switch1:7;
Switch0:8 -- Switch1:8;
}

如果我遍历边缘,我可以使用以下代码看到所有边缘:

for edge in G.edges():
print edge, edge.attr

边缘元组与您在下面的输出中看到的“相同”,但它们仍然通过属性进行区分。如果我想选择一个特定的属性,我可以在迭代时比较每个边不同的特定属性。

(u'Switch0', u'Switch1') {u'tailport': u'1', u'headport': u'1'}
(u'Switch0', u'Switch1') {u'tailport': u'2', u'headport': u'2'}
(u'Switch0', u'Switch1') {u'tailport': u'3', u'headport': u'3'}
(u'Switch0', u'Switch1') {u'tailport': u'4', u'headport': u'4'}
(u'Switch0', u'Switch1') {u'tailport': u'5', u'headport': u'5'}
(u'Switch0', u'Switch1') {u'tailport': u'6', u'headport': u'6'}
(u'Switch0', u'Switch1') {u'tailport': u'7', u'headport': u'7'}
(u'Switch0', u'Switch1') {u'tailport': u'8', u'headport': u'8'}

现在,如果我使用以下代码来获得优势:

edge = G.get_edge('Switch0', 'Switch1')
print edge, edge.attr

我只得到最后一个('Switch0', 'Switch1')边缘,如下所示:

(u'Switch0', u'Switch1') {u'tailport': u'8', u'headport': u'8'}

除了最后一个 (u'Switch0', u'Switch1') 边之外,有什么方法可以获取特定的边而不迭代所有边?通过在像 get_edge 或类似的方法中传递附加属性参数?

最佳答案

我找到了一种解决方案,看起来像是根据文档here建议的解决方案: 可选的 key 参数允许将键分配给边缘。这对于区分多边图中的平行边特别有用(strict=False)。

创建边时,add_edge 方法有一个可选的 Key 参数,默认设置为 None。如果提供了唯一的 key ,则在使用 get_edge 检索边时可以使用此Key。因此,如果我使用如下代码创建边缘:

# The for-loop will run from 1-8
for port in range(1, 9):
G.add_edge('Switch0', 'Switch1', key="{}-{}".format(port, port), headport = port, tailport = port)

然后我可以通过传递我之前以独特方式生成的 key 来检索特定的边:

for port in range(1, 9):
edge = G.get_edge('Switch0', 'Switch1', key="{}-{}".format(port, port))
print edge, edge.attr

关于python - pygraphviz:如何在不迭代的情况下在不同端口上连接相同的边?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28521781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com