我试图使用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)有关。
在python3中,使用
dict.items()
而不是dict.iteritems()
iteritems()
已在python3中删除,因此您不能再使用此方法。请看Python 3.0wikiBuilt-in Changes部分,其中说明:
在Python2中,词典中有
.items()
和.iteritems()
。dict.items()
返回字典中元组的列表[(k1,v1),(k2,v2),...]
。它复制了字典中的所有元组并创建了新的列表。如果字典很大,就会对内存产生很大的影响。所以他们在后来的Python2版本中创建了
dict.iteritems()
。这返回了迭代器对象。整个词典没有被复制,所以内存消耗较少。使用Python2
的人被教导使用dict.iteritems()
而不是.items()
来提高效率,如下代码所述。输出:
在Python3中,他们想使它更有效,所以将
dictionary.iteritems()
移到dict.items()
,并移除不再需要的.iteritems()
。您在
Python3
中使用了dict.iteritems()
,因此失败了。尝试使用与Python2
的dict.iteritems()
具有相同功能的dict.items()
。这是一个从Python2
到Python3
的微小位迁移问题。我有一个类似的问题(使用3.5),每天损失1/2,但这里有一个有用的东西-我退休了,只是学习Python,所以我可以帮助我的孙子(12)与它。
相关问题 更多 >
编程相关推荐