错误:“dict”对象没有属性“iteritems”

2024-05-16 15:39:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用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'

我正在使用Python3.4并通过pip install安装NetworkX。

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

据我所读,它可能与Python版本(Python2 vs Python3)有关。


Tags: 函数代码inpynetworkx节点错误line
3条回答

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

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

请看Python 3.0wikiBuilt-in Changes部分,其中说明:

Removed dict.iteritems(), dict.iterkeys(), and dict.itervalues().

Instead: use dict.items(), dict.keys(), and dict.values() respectively.

在Python2中,词典中有.items().iteritems()dict.items()返回字典中元组的列表[(k1,v1),(k2,v2),...]。它复制了字典中的所有元组并创建了新的列表。如果字典很大,就会对内存产生很大的影响。

所以他们在后来的Python2版本中创建了dict.iteritems()。这返回了迭代器对象。整个词典没有被复制,所以内存消耗较少。使用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()

您在Python3中使用了dict.iteritems(),因此失败了。尝试使用与Python2dict.iteritems()具有相同功能的dict.items()。这是一个从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

相关问题 更多 >