我正在尝试在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'
我不知道如何继续,但它至少留下了一个问题。 在第二种方法中,我应该以某种方式单独访问给定节点的每个边缘吗?
答案 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()
根据您的定义,您应该遍历与每个节点关联的列表以定义边缘。
答案 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
是列表,因此您必须逐个项目地添加该列表。