[英]How to retrieve or iterate over edge keys in python networkx MultiDiGraph
我有一个MultiDiGraph
,其中在基于键进行区分的节点之间可能存在多个边缘。 在整个图中,我有很多键,并且我想遍历它们,为每个键执行一个任务。
我可以解决的一种方法是遍历所有边缘,并将密钥存储在一组中。 然后,我将可以迭代该集合的元素:
import networkx as nx
G = nx.MultiDiGraph()
G.add_edge('a', 'b', 1)
G.add_edge('a', 'b', 2)
G.add_edge('b', 'c', 1)
G.add_edge('c', 'a', 3)
# Iterate over edges in the map and store the keys
keys = set(e[2] for e in G.edges_iter(keys=True))
# Now do something for each key
for key in keys:
pass # do something
但这似乎效率很低,因为我最终将遍历G
的边缘,然后再次遍历keys
。
我知道我可以通过以下方式建立我的集合来提高效率:
keys = set()
for e in G.edges_iter(keys=True):
key = e[2]
if key in keys:
continue
keys.add(key)
# do something
但是我真的希望在networkx
有一些我还没有遇到过的networkx
,或者是一些使它整洁的成语。 有任何想法吗?
NetworkX将密钥存储在邻接结构中,因此访问它们的唯一方法是对数据进行迭代
这似乎是最好的方法
# Iterate over edges in the map and store the keys
keys = set(e[2] for e in G.edges_iter(keys=True))
除非您可以在添加边缘时使用关键点。 您可以在add_edge
方法的子类中add_edge
键,以将键存储在单独的数据结构中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.