NetworkX文档中的示例出错(all_pairs_shortest_path)

时间:2018-03-15 21:38:01

标签: python networkx

我尝试从NetworkX包文档中复制并粘贴一个示例。 这是一个例子:

>>>G = nx.path_graph(5)
>>> path = nx.all_pairs_shortest_path(G)
>>> print(path[0][4])
[0, 1, 2, 3, 4]

不幸的是,我得到以下错误消息而不是预期的输出:

'generator' object has no attribute '__getitem__'

2 个答案:

答案 0 :(得分:2)

所以你的错误是因为在Python 2.x中,许多用于返回dicts的方法现在返回生成器。其中包括all_pairs_shortest_path。你正在使用这个新版本的networkx,但是看一个过时的教程。  因此,您看到的错误消息来自于您有一个生成器path并且您正在尝试访问path[0],这对Python没有意义。这里最简单的解决方法是简单地按照Walter提供的答案说出

path = dict(nx.all_pairs_shortest_path(G))

通常,当使用为networkx 1.x编写的代码,但是您使用的是版本2.x时,应该查阅migration guide(尽管在您的情况下它并不是特别有用)。

答案 1 :(得分:1)

看起来路径是一个生成器:将其转换为字典,它可以工作:

path = dict(nx.all_pairs_shortest_path(G))