我正在尝试使用networkx上的图形。我在python中进行编码,并具有必要的扩展名。该代码块是:
gr = {"0": ["4"],
"1": ["3"],
"2": ["2", "3", "4", "5"],
"3": ["1", "3"],
"4": ["3"],
"5": ["4"]
}
msg = nx.make_small_graph(gr)
但我收到此错误:
回溯(最近通话最近一次):
文件
中的文件“ C:\ eclipse-workspace \ graohToJSON \ GraphToJSON.py”,第16行msg = nx.make_small_graph(gr) #Make Small Graph
make_small_graph中第90行的文件“ C:\ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ networkx \ generators \ small.py”
ltype = graph_description[0]
KeyError:0
答案 0 :(得分:1)
您可以直接直接创建(有向图)图:
import networkx as nx
gr = {"0": ["4"],
"1": ["3"],
"2": ["2", "3", "4", "5"],
"3": ["1", "3"],
"4": ["3"],
"5": ["4"]
}
msg = nx.DiGraph(gr)
print(msg.edges)
# [('3', '3'), ('3', '1'), ('2', '4'), ('2', '3'), ('2', '2'), ('2', '5'), ('4', '3'), ('1', '3'), ('5', '4'), ('0', '4')]
答案 1 :(得分:1)
我认为Sparky05对您来说是最好的答案-也就是说,另一个命令将处理您尝试使用的格式(尽管我建议使用整数而不是字符串)。
此答案说明您使用的结构有什么问题。
从documentation到make_small_graph
:
make_small_graph (graph_description,create_using = None)
形式的列表
graph_description
是[ltype,name,n,xlist]
这里
ltype
是"adjacencylist"
或"edgelist"
之一,name
是图的名称,n
是节点的数量。这将构造一个具有整数标签0,..,n-1
的n个节点的图。如果
ltype
="adjacencylist"
,则xlist
是具有完全n
项的邻接表,在第j个项(可以为空)中指定节点连接到顶点j。...使用
create_using
参数选择图形的类/类型。
因此,您输入了gr
,这是一个字典,其键是字符串。但是,它期待的是非常不同的东西:一个列表,gr[0]
应该是"adjacencylist"
或"edgelist"
,并且其其他元素可以提供有关该图的其他信息。
因此,您需要将输入作为一个列表,其第一个元素告诉它有关图结构的信息的格式。然后,列表的第二个元素必须是您要给图形提供的名称。下一个元素必须是图形中的节点数。最后的条目要么是边列表,要么是给每个节点相邻节点的列表。
据我所知,您想要一个有向图(否则4的边也要为0,而不仅仅是0的边要为4):
gr = ['adjacencylist', 'my_graph', 6, [[4], [3], [2,3,4,5], [1,3], [3], [4]]]
G = nx.make_small_graph(gr, create_using = nx.DiGraph)
文档中显示了几个具体示例,因此请看一下。