KeyError:在networkx中使用make_small_graph功能时

时间:2019-05-08 02:19:12

标签: python-3.x networkx

我正在尝试使用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

2 个答案:

答案 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对您来说是最好的答案-也就是说,另一个命令将处理您尝试使用的格式(尽管我建议使用整数而不是字符串)。

此答案说明您使用的结构有什么问题。

documentationmake_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)

文档中显示了几个具体示例,因此请看一下。