You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取字典迭代器的长度?networkx邻居迭代器使用报错如何解决

问题原因
  1. 首个TypeError: object of type 'dict_keyiterator' has no len()报错:
    NetworkX 2.x的Graph.neighbors()方法返回的是迭代器对象,迭代器为惰性计算设计,本身没有长度属性,无法直接调用len()计算长度。
  2. 后续TypeError: 'NoneType' object is not subscriptable报错:
    迭代器是一次性消耗品,你第一次调用list(neighbours)时已经把迭代器内的所有元素全部读取耗尽,后续遍历空迭代器时无法拿到有效的邻居节点,你的业务逻辑如果尝试对空值做下标访问就会触发该报错。
解决方案

拿到迭代器后直接转为列表存储,后续所有长度计算、遍历操作都复用这个列表即可,示例代码如下:

# 第一步直接将迭代器转为列表存储
neighbours = list(nxobject.neighbors('Something'))
# 直接对列表求长度,无额外消耗
print(len(neighbours)) 
# 遍历存储好的列表,可正常拿到所有邻居节点
for child in neighbours: 
    # 你的业务逻辑代码
    return Done_work 
return None
特殊场景适配

如果你处理的图节点量级极大,不想一次性把所有邻居节点加载到内存,可以选择在遍历迭代器的同时自行计数,不需要提前转列表:

neighbours = nxobject.neighbors('Something')
count = 0
for child in neighbours:
    count += 1
    # 你的业务逻辑代码
print(count)

内容的提问来源于stack exchange,提问作者Saiham Rahman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 05:57:01