【问题标题】:Error when adding edges to network graph: 'v_of_edge'向网络图添加边时出错:'v_of_edge'
【发布时间】:2018-03-22 15:41:30
【问题描述】:

我正在尝试基于包含节点和边的默认字典在 NetworkX 中创建网络图。当我尝试添加边缘时,我收到以下错误消息:

add_edge() 缺少 1 个必需的位置参数:'v_of_edge'

我的代码如下:

graph = { "a" : ["c"],
      "b" : ["c", "e"],
      "c" : ["a", "b", "d", "e"],
      "d" : ["c"],
      "e" : ["c", "b"],
      "f" : []
    } 

G = nx.Graph()

for k,v in graph.items():

    G.add_node(k)
    G.add_edge(*v)
nx.draw()
plt.show()

我知道add_edge 接受(u,v) 参数,我认为u 是节点,v 是边,所以我尝试了:

G.add_edge(k,v)

但这导致了一条新的错误消息:

不可散列的类型:“列表”

我不知道该怎么做,但这至少给我留下了一个问题。 在第二种方法中,我应该以某种方式分别访问给定节点的每条边吗?

【问题讨论】:

  • 你看过 add_edge (networkx.github.io/documentation/networkx-1.10/reference/…) 的文档吗?有帮助吗?
  • @MichaWiedenmann 这让我觉得我必须循环遍历每个节点的关联列表中的每个元素,正如 Yilun 在下面建议的那样。感谢您抽出宝贵时间回复。
  • 当您收到这样的错误提示您向函数发送了错误的数据类型时,您应该做的第一件事是在函数调用之前打印该参数。通常这足以找出问题所在。

标签: python networkx


【解决方案1】:

您的代码中的问题是v 是您的图形结构定义中的一个列表。以下代码将使其工作:

graph = { "a" : ["c"],
      "b" : ["c", "e"],
      "c" : ["a", "b", "d", "e"],
      "d" : ["c"],
      "e" : ["c", "b"],
      "f" : []
    } 

G = nx.Graph()

for k,v in graph.items():
    for vv in v:
        G.add_edge(k,vv)
nx.draw(G)
plt.show()

根据您的定义,您应该遍历与每个节点关联的列表以定义边。

【讨论】:

    【解决方案2】:

    以下是您的代码的修复程序,可以使其正常工作:

    import networkx as nx
    graph = {'a': ['c'], 'b': ['c', 'e'], 'c': ['a', 'b', 'd', 'e'], 'd': ['c'], 'e': ['c', 'b'], 'f': []}
    
    G = nx.Graph()
    
    for k,v in graph.items():
        G.add_node(k)
        for i in v:
            G.add_edge(k, i)
    
    nx.draw(G)
    
    import matplotlib.pyplot as plt
    plt.show()
    

    如您所见,主要问题是您需要正确添加每条边。由于您的 v 是列表,因此您必须逐项在该列表中添加边缘。

    【讨论】:

    • 谢谢亚米拉!我决定接受上面的 Yilun 回答,因为他首先发布了解决方案,而您的解决方案基本上提出了相同的建议。
    • AttributeError: 'MultiDiGraph' 对象没有属性 'items'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 2011-05-11
    • 1970-01-01
    相关资源
    最近更新 更多