将NetworkX MultiDiGraph转换为字典或从字典转换

时间:2017-08-16 17:45:11

标签: python graph networkx

我对NetworkX documentation的阅读表明这应该有用,但似乎并不适用?

考虑:

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

我在这里犯了一个小错误,或者这是一个错误?

对于我的应用程序,我发现了一个更好的选择,即使用networkx.readwrite.json_graph进行序列化,但我想我会留下这个问题,以防它对其他人有用。

1 个答案:

答案 0 :(得分:1)

问题是nx.from_dict_of_dicts()的默认图表输出似乎是一个简单的图表。

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

尝试创建一个与您想要的输出相同类型的新空图 - 所以在您的情况下是MultiDiGraph。然后使用create_using的{​​{1}}参数确保您的新图表属于该类型:

nx.from_dict_of_dicts()

成功!