当尝试使用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。 这是从Python2
到Python3
一小部分迁移问题。
我有一个类似的问题(使用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()
相同。