错误:“‘dict’对象没有属性‘iteritems’”

新手上路,请多包涵

我正在尝试使用 NetworkX 读取 Shapefile 并使用函数 write_shp() 生成将包含节点和边的 Shapefile,但是当我尝试运行代码时,它会出现以下错误:

 Traceback (most recent call last):   File
"C:/Users/Felipe/PycharmProjects/untitled/asdf.py", line 4, in
<module>
    nx.write_shp(redVial, "shapefiles")   File "C:\Python34\lib\site-packages\networkx\readwrite\nx_shp.py", line
192, in write_shp
    for key, data in e[2].iteritems(): AttributeError: 'dict' object has no attribute 'iteritems'

我正在使用 Python 3.4 并通过 pip install 安装了 NetworkX。

在此错误之前,它已经给了我另一个说“xrange 不存在”或类似内容的错误,所以我查找并在 xrange 更改为 range 。 py 文件,这似乎解决了它。

根据我的阅读,它可能与 Python 版本(Python2 vs Python3)有关。

原文由 friveraa 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 701
2 个回答

正如您在 python3 中一样,使用 dict.items() 而不是 dict.iteritems()

iteritems() 在python3中被移除,所以你不能再使用这个方法了。

查看 Python 3.0 Wiki 内置更改 部分,其中说明:

删除 dict.iteritems()dict.iterkeys()dict.itervalues()

相反:分别使用 dict.items()dict.keys()dict.values()

原文由 rafaelc 发布,翻译遵循 CC BY-SA 4.0 许可协议

Python2 中,我们在字典中有 .items().iteritems()dict.items() 返回字典中的元组列表 [(k1,v1),(k2,v2),...] 。它复制了字典中的所有元组并创建了新列表。如果字典很大,对内存的影响就很大。

所以他们在更高版本的Python2中创建了 dict.iteritems() 。这返回迭代器对象。没有复制整个字典,因此内存消耗较少。使用 Python2 的人被教导使用 dict.iteritems() 而不是 .items() 以提高效率,如以下代码所述。

 import timeit

d = {i:i*2 for i in xrange(10000000)}
start = timeit.default_timer()
for key,value in d.items():
    tmp = key + value #do something like print
t1 = timeit.default_timer() - start

start = timeit.default_timer()
for key,value in d.iteritems():
    tmp = key + value
t2 = timeit.default_timer() - start

输出:

 Time with d.items(): 9.04773592949
Time with d.iteritems(): 2.17707300186

Python3 中,他们希望提高效率,因此将 dictionary.iteritems() 移动到 dict.items() ,并删除了 .iteritems() 不再需要它。

您在 中使用了 dict.iteritems() Python3 所以它失败了。尝试使用 dict.items()dict.iteritems()Python2 具有相同的功能。这是从 Python2Python3 的一个微小的迁移问题。

原文由 Prabhu 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题