首页 > 解决方案 > 在 NodeView 对象的节点上调用 random.choice 引发 KeyError

问题描述

我试图从一组节点 ( G.nodes()) 中选择一个元素,但没有得到输出。而是得到错误。以下是详细信息。我正在使用 Python 3.6

什么时候G

Out[36]: NodeView(('Delhi', 'Bangalore', 'Hyderabad', 'Ahmedabad', 'Chennai', 'Kolkatta', 'Surat', 'Pune', 'Jaipur'))

代码:

c1=random.choice(G.nodes())

Traceback (most recent call last):

  File "<ipython-input-43-8dfc19a66804>", line 1, in <module>
    c1=random.choice(G.nodes())

  File "C:\Users\prasa\Anaconda3\lib\random.py", line 259, in choice
    return seq[i]

  File "C:\Users\prasa\Anaconda3\lib\site-packages\networkx\classes\reportviews.py", line 178, in __getitem__
    return self._nodes[n]

KeyError: 5

标签: python

解决方案


显然你正在使用networkx。查找文档,Graph我可以看到它是这样说的:

Graph 的 NodeView 为 G.nodes 或 G.nodes()。

G.nodes 用于数据查找和类似集合的操作。

[...]

退货


NodeView 允许对节点进行类似集合的操作以及节点属性字典查找和调用以获取 NodeDataView。 NodeDataView 迭代(n, data)并且没有设置操作。NodeView 迭代n并包含集合操作。

然而random.choice需要一个序列而不是一个集合/map-like对象。您可以通过简单地调用来获得一个序列list

random.choice(list(G.nodes()))

该错误是由于NodeView没有由集合中节点的位置索引,因此当random.choice生成随机索引(根据存在的节点数)以返回随机节点时,它会失败KeyError


推荐阅读