Error: “ 'dict' object has no attribute 'iteritems' ”
我试图使用networkx读取一个shapefile,并使用函数
1 2 3 4 5 6 7 8 9 | 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 etworkx eadwrite x_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文件中将
从我读到的内容来看,它可能与Python版本(python2与python3)有关。
在python3中,使用
在python3中删除了
看看python 3.0 wiki内置的changes部分,其中说明了:
Removed
dict.iteritems() ,dict.iterkeys() , anddict.itervalues() .Instead: use
dict.items() ,dict.keys() , anddict.values()
respectively.
号
在python2,字典中有
所以他们在后来的python2版本中创建了
1 2 3 4 5 6 7 8 9 10 11 12 | 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 |
号
输出:
1 2 | Time with d.items(): 9.04773592949 Time with d.iteritems(): 2.17707300186 |
在python3,他们想提高效率,于是把
你在
我也遇到过类似的问题(使用3.5),每天损失1/2的时间,但这里有一件事是可行的——我退休了,只是在学习python,所以我可以帮助我的孙子(12)。
1 2 3 4 5 6 7 8 | 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中,
在肾盂3中使用
正如拉斐尔所回答的,python 3重命名了dict.iteritems->dict.items。尝试其他包版本。这将列出可用的包:
1 | python -m pip install yourOwnPackageHere== |
然后用您将在==之后尝试的版本重新运行以安装/切换版本
如果要包含同时支持PY版本2和3的代码,
1 2 3 4 | try: iteritems except NameError: iteritems = items |
。
如果您将项目部署到其他系统中,并且不确定PY版本,这将有所帮助。