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范围不存在"或类似的东西,所以我看着它,只是改变xrange以range在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()分别.
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.这是从一点点的迁移问题Python2来Python3.
小智 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()。