Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 错误:"';dict';对象没有属性';iteritems'&引用;_Python_Python 3.x_Dictionary - Fatal编程技术网

Python 错误:"';dict';对象没有属性';iteritems'&引用;

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

我正在尝试使用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:\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==