当尝试使用NetworkX的write_shp()时,错误“'dict'对象没有属性'iteritems'

我试图使用NetworkX来读取Shapefile并使用函数write_shp()来生成将包含节点和边的Shapefile(以下示例 – https://networkx.github.io/documentation/latest/reference/ readwrite.nx_shp.html ),但是当我尝试运行代码时,它给了我以下错误:

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安装来安装NetworkX。

在这个错误之前,它已经给了我另一个说“xrange不存在”或类似的东西,所以我查了一下,只是把nx_shp.py文件中的'xrange'改为'range',似乎解决了这个问题。

从我读过的内容可能与Python版本(Python2与Python3)有关。

正如你在python3,使用dict.items()而不是dict.iteritems()

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

看看Python Wiki( 链接 )

内置变更部分,据说

删除了dict.iteritems(),dict.iterkeys()和dict.itervalues()。

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

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

所以他们在dict.iteritems()更高版本中创build了dict.iteritems() 。 这个返回的迭代器对象。 整个字典没有被复制,所以内存消耗较less。 使用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() ,并移除.iterates()因为它不再需要。

你已经在Python3使用了dict.iterates() ,所以失败了。 尝试使用dict.items() ,它具有与dict.iteritems()相同的function。 这是从Python2Python3一小部分迁移问题。

我有一个类似的问题(使用3.5),每天损失1/2,但这是一个有用的东西 – 我退休了,只是学习Python,所以我可以帮助我的孙子(12)。

 mydict2={'Atlanta':78,'Macon':85,'Savannah':72} maxval=(max(mydict2.values())) print(maxval) mykey=[key for key,value in mydict2.items()if value==maxval][0] print(mykey) YEILDS; 85 Macon 

在Python2中, dictionary.iteritems()dictionary.items()更有效,因此在Python3中, dictionary.iteritems()的function已经迁移到dictionary.items()并且iteritems()被删除。 所以你得到这个错误。

在Python3中使用dict.items() ,它与dict.iteritems()相同。