向网络图添加边时出错:'v_of_edge'

时间:2018-03-22 15:41:31

标签: python networkx

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

  

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)

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

  

不可用类型:'list'

我不知道如何继续,但它至少留下了一个问题。 在第二种方法中,我应该以某种方式单独访问给定节点的每个边缘吗?

2 个答案:

答案 0 :(得分:4)

代码中的问题是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()

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

enter image description here

答案 1 :(得分:0)

以下是对您的代码进行修复以使其正常工作:

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是列表,因此您必须逐个项目地添加该列表。