【问题标题】:How to retrieve or iterate over edge keys in python networkx MultiDiGraph如何在 python networkx MultiDiGraph 中检索或迭代边缘键
【发布时间】:2016-04-04 17:47:38
【问题描述】:

我有一个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 有一些特别的东西,我只是没有遇到过,或者一些成语来使这个整洁。有什么想法吗?

【问题讨论】:

    标签: python key networkx


    【解决方案1】:

    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 方法,以便在添加键时将键存储在单独的数据结构中。

    【讨论】:

      猜你喜欢
      • 2020-05-20
      • 2014-05-25
      • 2021-01-23
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      • 2021-06-03
      • 2022-10-13
      • 1970-01-01
      相关资源
      最近更新 更多