python - 在 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
解决方案
显然你正在使用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
。
推荐阅读
- ios - Godot 导出到 IOS 失败
- java - 与 Postman 相比,CloseableHttpClient 的预期性能是多少
- javascript - 如何从字典中制作 JSON 对象?
- javascript - chrome扩展链接不显示背景
- excel - 在 Excel 中创建目录的论坛
- delphi - Delphi 错误“E2064 左侧无法分配给”64 位
- python - 从字典中的列表创建表和排序数据
- javascript - 为什么“this”关键字指的是传递的参数?
- c++ - 为什么我的头指针在链表中发生变化,甚至没有通过引用传递它?
- javascript - 删除 Mustache.js 中 {{vaue}} 之间的空格