오류: 'dct' 개체에 'iteritems' 특성이 없음 "
NetworkX를 사용하여 Shape 파일을 읽고 함수를 사용하려고 함write_shp()
노드와 에지를 포함하는 Shape 파일을 생성하지만 코드를 실행하려고 하면 다음 오류가 발생함:
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'
Python 3.4를 사용하고 pip install로 NetworkX를 설치했다.
이 오류 이전에 그것은 이미 나에게 "xrange는 존재하지 않는다"거나 하는 다른 것을 주었기 때문에 나는 그것을 찾아보고 그냥 바꿨다.xrange
로range
해결되는 것 같았던 nx_shp.py 파일에.
내가 읽은 바로는 파이톤 버전(피톤2 vs 파이톤3)과 관련이 있을 수 있다.
당신이 python3에 있을 때, 사용하라.dict.items()
대신에dict.iteritems()
iteritems()
python3에서 제거되었으므로 더 이상 이 방법을 사용할 수 없다.
Python 3.0 Wiki 기본 제공 변경 섹션을 참조하십시오.
제거된
dict.iteritems()
,dict.iterkeys()
그리고dict.itervalues()
.대신: 사용
dict.items()
,dict.keys()
그리고dict.values()
각각
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
출력:
Time with d.items(): 9.04773592949
Time with d.iteritems(): 2.17707300186
Python3에서 그들은 그것을 더 효율적으로 만들기를 원했고, 그래서 움직였다.dictionary.iteritems()
로dict.items()
, 및 제거됨.iteritems()
더 이상 필요하지 않았기 때문에
사용한 적이 있음dict.iteritems()
에Python3
그래서 그것은 실패했다.사용 시도dict.items()
동일한 기능을 가진dict.iteritems()
의Python2
. 이것은 매우 작은 마이그레이션 문제 입니다.Python2
로Python3
.
나는 비슷한 문제를 가지고 있었고(3.5 사용) 하루에 1/2을 잃었지만, 여기 효과가 있는 것이 있다 - 나는 은퇴했고 단지 파이썬을 배워서 손자(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
파이썬2에서는dictionary.iteritems()
보다 효율적이다dictionary.items()
그래서 Python3에서는 의 기능성이dictionary.iteritems()
로 마이그레이션됨dictionary.items()
그리고iteritems()
제거됨그래서 당신은 이 오류를 겪고 있는 것이다.
사용하다dict.items()
와 같은 파이톤3에서dict.iteritems()
파이선2의
의 목적.iteritems()
루핑하는 동안 한 번에 하나의 결과를 내림으로써 메모리 공간을 적게 사용하는 것이었다.왜 Python 3 버전이 지원되지 않는지 모르겠다.iteritems()
보다 효율적이라는 것이 증명되었음에도 불구하고.items()
PY 버전 2와 3을 모두 지원하는 코드를 포함하려면,
try:
iteritems
except NameError:
iteritems = items
이것은 PY 버전에 대해 잘 모르는 다른 시스템에 프로젝트를 배포하는 경우에 도움이 될 수 있다.
라파엘C의 대답에 따라 파이톤 3은 detc.iteritems -> detc.items로 이름을 바꾸었다.다른 패키지 버전을 사용해 보십시오.사용 가능한 패키지가 나열됨:
python -m pip install yourOwnPackageHere==
그런 다음 버전 설치/전환 후 시도할 버전으로 다시 실행하십시오.
참조URL: https://stackoverflow.com/questions/30418481/error-dict-object-has-no-attribute-iteritems
'Programing' 카테고리의 다른 글
라우터가 정의되지 않은 대응 라우터 및 스프링 부트 서버 (0) | 2022.03.28 |
---|---|
vuejs vuex는 돌연변이 없이 2방향 바인딩 상태로 사용(v-model) (0) | 2022.03.28 |
JSON에서 유니코드 대신 문자열 객체를 가져오는 방법 (0) | 2022.03.28 |
하위 구성 요소에서 상위 데이터 업데이트 (0) | 2022.03.28 |
vuetify.js v-property의 전체 너비를 얻는 방법 (0) | 2022.03.28 |