我尝试从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__'
答案 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))