Python 错误:"';dict';对象没有属性';iteritems'&引用;
我正在尝试使用NetworkX读取形状文件,并使用函数Python 错误:"';dict';对象没有属性';iteritems'&引用;,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,我正在尝试使用NetworkX读取形状文件,并使用函数write_shp()生成包含节点和边的形状文件,但当我尝试运行代码时,会出现以下错误: Traceback (most recent call last): File "C:/Users/Felipe/PycharmProjects/untitled/asdf.py", line 4, in <module> nx.write_shp(redVial, "shapefiles") File "C:\Python3
write_shp()
生成包含节点和边的形状文件,但当我尝试运行代码时,会出现以下错误:
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'
回溯(最近一次调用上次):文件
“C:/Users/Felipe/PycharmProjects/untitled/asdf.py”,第4行
write_shp(redVial,“shapefiles”)文件“C:\Python34\lib\site packages\networkx\readwrite\nx_shp.py”,第行
192,写在shp中
对于键,e[2]中的数据。iteritems():AttributeError:“dict”对象没有属性“iteritems”
我使用的是Python 3.4,并通过pip安装安装了NetworkX
在这个错误之前,它已经给了我另一个说“xrange不存在”或类似的东西,所以我查了一下,在nx_shp.py文件中将xrange
更改为range
,这似乎解决了这个问题
据我所知,它可能与Python版本(Python2与Python3)有关。正如在Python3中一样,使用
dict.items()
而不是dict.iteritems()
iteritems()
已在python3中删除,因此您不能再使用此方法
请看一看Python 3.0 Wiki部分,其中指出:
删除了dict.iteritems()
,dict.iterkeys()
,以及dict.itervalues()
改为:使用dict.items()
,dict.keys()
,和dict.values()
分别
我有一个类似的问题(使用3.5),每天损失1/2的时间,但这里有一个可行的办法——我退休了,正在学习Python,这样我就可以帮助我的孙子(12岁)
在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()
,因此它失败了。尝试使用dict.items()
,其功能与Python2
的dict.iteritems()
相同。这是一个从Python2
到Python3
的微小迁移问题,在Python2中,dictionary.iterms()
比dictionary.items()
更有效,因此在Python3中,dictionary.iterms()
的功能已经迁移到dictionary.items()
和iterms()
已删除。所以你得到了这个错误
在Python3中使用
dict.items()
,这与Python2的dict.iteritems()
相同。的目的是在循环时一次生成一个结果,从而使用更少的内存空间。我不知道为什么Python3版本不支持iteritems()
,尽管事实证明它比.items()
如果要包含同时支持PY版本2和3的代码
try:
iteritems
except NameError:
iteritems = items
如果您在其他系统中部署项目,并且您不确定PY版本,那么这会有所帮助 正如RafaelC所回答的那样,Python 3重命名了dict.iteritems->dict.items。 请尝试其他软件包版本。这将列出可用的软件包:
python -m pip install yourOwnPackageHere==
然后使用您将在==之后尝试的版本重新运行,以安装/切换版本Python3重命名为
dict.iteritems->dict.items
。噢,哇,我现在觉得很傻,谢谢你的帮助answer@Blender:否,它没有将iteritems
重命名为项
。前者提供了一个迭代器(3.x没有这样的方法);后者为您提供了一个视图(作为viewitems
)后端口为2.7。该视图的可能副本可能与OP最初链接的页面相同,也可能与OP最初链接的页面不同:关于该页面的进一步讨论正式记录在中。建议的方法似乎是使用future.utils
或6个
模块的iteritems
功能。
python -m pip install yourOwnPackageHere==