问题:错误:“’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
nx_shp.py文件,似乎可以解决该问题。
根据我的阅读,它可能与Python版本(Python2 vs Python3)有关。
回答 0
正如您在python3中一样,请使用dict.items()
代替dict.iteritems()
iteritems()
已在python3中删除,因此您无法再使用此方法。
看一下Python 3.0 Wiki的“ 内置更改”部分,其中指出:
删除
dict.iteritems()
,dict.iterkeys()
和dict.itervalues()
。相反:使用
dict.items()
,dict.keys()
和dict.values()
分别。
回答 1
在Python2中,我们有.items()
和.iteritems()
在字典中。dict.items()
返回字典中的元组列表[(k1,v1),(k2,v2),...]
。它复制了字典中的所有元组并创建了新列表。如果字典很大,则对内存的影响很大。
因此,他们dict.iteritems()
在更高版本的Python2中创建了代码。此返回的迭代器对象。未复制整个词典,因此内存消耗较少。使用人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
。这是从Python2
到的一点点迁移问题Python3
。
回答 2
我有一个类似的问题(使用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
回答 3
在Python2 中,该功能dictionary.iteritems()
比dictionary.items()
Python3中的效率更高,该功能dictionary.iteritems()
已迁移到dictionary.items()
并iteritems()
已删除。因此,您将收到此错误。
dict.items()
在Python3中使用,与Python2相同dict.iteritems()
。
回答 4
这样做的目的.iteritems()
是通过在循环时一次产生一个结果来使用较少的存储空间。我不确定为什么Python 3版本不支持,iteritems()
尽管事实证明它比.items()
如果要包含同时支持PY版本2和3的代码,
try:
iteritems
except NameError:
iteritems = items
如果您在其他系统上部署项目并且不确定PY版本,这将有所帮助。
回答 5
正如RafaelC回答的那样,Python 3重命名了dict.iteritems-> dict.items。尝试使用其他软件包版本。这将列出可用的软件包:
python -m pip install yourOwnPackageHere==
然后重新运行您要在==之后尝试安装/切换版本的版本