如何将图节点链接到其键与节点相同的字典?
我正在使用Networkx来构建一个二维图(用于“老鼠在迷宫”问题)。我已经创建了这个图,当我打印出Networkx图时,我得到了以(行,列)形式表示的坐标。我还创建了一个单独的字典,里面的项数和图中的节点名称相匹配,也是以(行,列)形式表示的。现在我只需要将每个字典的键与图连接起来,这样我就可以使用每个键的值(这个值是我可以使用的“移动方向”)。这里的“连接”可以是字面上将两个对象连接起来,或者是设置Networkx图中每个节点的属性。
我尝试使用nx.relabel_nodes()
,但出现了错误,提示某些键不在图中,尽管它们显然是存在的。
简单来说,我该如何将图与一个具有相同键名的字典连接起来呢?
如果有更好的方法将图中的每个节点与其“方向”连接起来,请也提一下(不需要给出具体代码,因为我还是想学习如何做到这一点,我只是想要一些方向)。
如果需要更多信息,我会回复提供。
编辑:
例如,我的networkx图是这样声明的:
row = 2
col = 2
mygraph = nx.grid_2d_graph(row, col)
打印出来的结果是:
{(0,0), (0,1), (1,0), (1,1)}
这看起来和一个字典很相似。查看NetworkX的文档,我发现使用relabel_node()
可以通过类似结构的字典来编辑每个节点:
mydict = {(0,0): l, (0,1): r, (1,0): u, (1,1): d} #may have mussed up the structure, but this is a dict
通过这样做:
nx.relabel_nodes(mygraph, mydict, False)
但这会返回一个错误,提示某些节点不在图中。
1 个回答
0
下面是如何使用relabel_nodes的:
In [1]: import networkx as nx
In [2]: G = nx.grid_2d_graph(2, 2)
In [3]: G.nodes()
Out[3]: [(0, 1), (1, 0), (0, 0), (1, 1)]
In [4]: mapping = {(0,0): 'l', (0,1): 'r', (1,0): 'u', (1,1): 'd'}
In [5]: nx.relabel_nodes(G, mapping).nodes()
Out[5]: ['d', 'l', 'r', 'u']