【发布时间】:2018-08-07 01:59:40
【问题描述】:
给定networkx中的一个无向图:
graph=Graph()
graph.add_edge(1,2)
graph.add_edge(2,3)
当使用graph.edges()方法查询该图的边集时,结果以元组的形式返回,即边集的有向视图。在上面的示例中,graph.edges() 返回:
[(1, 2), (2, 3)]
如果我要查询与顶点 2 (graph.edges(2)) 相关的所有边,我会得到不同的定向视图:
[(2, 1), (2, 3)]
例如,如果我有一个将边缘(键)映射到其他对象的外部字典,则此行为是有问题的。例如:
lookup={edge : some_object(edge) for edge in graph.edges()}
for edge in graph.edges(2):
print(lookup(edge)) #throws key not found exception
抛出异常是因为键 (1,2) 存在,但 (2,1) 不存在。在networkx中迭代无向图时,获取无向对象的最佳(高效/pythonic / ...)方法是什么?我可以将 some_object(edge) 与边缘关联起来作为其属性之一,但这并不能真正回答问题。
【问题讨论】:
-
如果您使用的是 networkx v2.x,可能值得一看“有序图”:networkx.github.io/documentation/stable/reference/classes/… 这些基本上是图,但似乎可以避免您遇到的问题。另一种方法可能是始终使用
sorted(edge),尽管它会返回一个列表,因此您可能需要tuple(sorted(edge))。 -
另一个选项是
try.. except。
标签: networkx