Python 将NetworkX有向图转换为字典或从字典转换为有向图

Python 将NetworkX有向图转换为字典或从字典转换为有向图,python,graph,networkx,Python,Graph,Networkx,我对NetworkX的阅读表明,这应该是可行的,但似乎不行 考虑: import networkx as nx g = nx.MultiDiGraph() g.add_nodes_from([0, 1]) g.add_edge(0,1) g.add_edge(0,1) g.edges() # returns [(0, 1), (0, 1)] d = nx.to_dict_of_dicts(g) # returns {0: {1: {0: {}, 1: {}}}, 1: {}} g2 =

我对NetworkX的阅读表明,这应该是可行的,但似乎不行

考虑:

import networkx as nx
g = nx.MultiDiGraph()
g.add_nodes_from([0, 1])
g.add_edge(0,1)
g.add_edge(0,1)

g.edges()  # returns [(0, 1), (0, 1)]

d = nx.to_dict_of_dicts(g)  # returns {0: {1: {0: {}, 1: {}}}, 1: {}}

g2 = nx.from_dict_of_dicts(d, multigraph_input=True)
# or, equivalently?, g2 = MultiDiGraph(d)

g2.edges()  # only returns [(0,1)]
我在这里犯的是一个小错误,还是一个bug


对于我的应用程序,我发现了一个更好的替代方法,那就是使用
networkx.readwrite.json\u graph
进行序列化,但我认为我应该把问题留在这里,以防它对其他人有用。

问题是
nx.from\u dict\u of\u dicts()
的默认图形输出似乎是一个简单的图形

>>> g2
<networkx.classes.graph.Graph at 0x10877add0>
成功

好极了!非常感谢:)我本以为
multigraph\u input=True
会解决这个问题,但错过了使用
arg创建的
create\u。
>>> G = nx.MultiDiGraph()
>>> g3 = nx.from_dict_of_dicts(d, multigraph_input=True, create_using=G)
>>> g3.edges()
[(0, 1), (0, 1)]
>>> g3
<networkx.classes.multidigraph.MultiDiGraph at 0x1087a7190>