错误:"'dict'对象没有属性'iteritems'"

fri*_*raa 370 python dictionary

我正在尝试使用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'
Run Code Online (Sandbox Code Playgroud)

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

这个错误之前,它已经给了我另外一个说:"x范围不存在"或类似的东西,所以我看着它,只是改变xrangerange在nx_shp.py文件,这似乎解决它.

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

raf*_*elc 774

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

iteritems() 已在python3中删除,因此您不能再使用此方法.

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

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

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

  • `dict.items()`也在python 2.7中工作 (19认同)
  • 将其更改为dict.items()并按预期工作,谢谢! (6认同)

Pra*_*bhu 30

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
Run Code Online (Sandbox Code Playgroud)

输出:

Time with d.items(): 9.04773592949
Time with d.iteritems(): 2.17707300186
Run Code Online (Sandbox Code Playgroud)

Python3,他们想使之更有效率,所以感动dictionary.iteritems()dict.items(),并删除.iteritems(),因为它不再需要.

你使用过dict.iteritems(),Python3所以失败了.尝试使用dict.items()具有相同功能dict.iteritems()Python2.这是从一点点的迁移问题Python2Python3.


小智 5

我有一个类似的问题(使用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
Run Code Online (Sandbox Code Playgroud)


小智 5

在Python2 中,此功能dictionary.iteritems()dictionary.items()Python3中的效率更高,dictionary.iteritems()已迁移到dictionary.items()iteritems()删除了的功能。因此,您将收到此错误。

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