繁体   English   中英

如何在python networkx MultiDiGraph中检索或遍历边缘键

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM