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'
Python 3.4를 사용하고 pip install을 통해 NetworkX를 설치했습니다.
나는 그것을 보았다 있도록이 오류 전에 이미 나에게 “xrange이 존재하지 않습니다”또는 그런 일 밝혔다 다른 하나를 부여했다 단지 변화 xrange
에 range
그것을 해결 듯 nx_shp.py 파일에.
내가 읽은 내용에서 파이썬 버전 (Python2 vs Python3)과 관련이 있습니다.
답변
python3에서와 같이 dict.items()
대신dict.iteritems()
iteritems()
python3에서 제거되었으므로 더 이상이 방법을 사용할 수 없습니다.
Python 3.0 Wiki Built-in Changes 섹션을 살펴보십시오 .
제거
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
답변
Python2에서 dictionary.iteritems()
보다 더 효율적 dictionary.items()
이므로 Python3에서의 기능은 dictionary.iteritems()
이전되었습니다 dictionary.items()
및 iteritems()
제거된다. 따라서이 오류가 발생합니다.
dict.items()
Python2와 동일한 Python3에서 사용하십시오 dict.iteritems()
.
답변
.iteritems()
반복하는 동안 한 번에 하나의 결과를 생성하여 메모리 공간을 적게 사용 하는 것이 목적 이었습니다. 파이썬 3 버전이 왜 iteritems()
효율적 이지 않은지 확실하지 않지만 왜 확실하지 않습니다.items()
PY 버전 2와 3을 모두 지원하는 코드를 포함하려면
try:
iteritems
except NameError:
iteritems = items
이것은 다른 시스템에 프로젝트를 배포하고 PY 버전에 대해 잘 모르는 경우 도움이 될 수 있습니다.
답변
RafaelC의 답변에 따라 Python 3은 dict.iteritems-> dict.items로 이름을 변경했습니다. 다른 패키지 버전을 사용해보십시오. 사용 가능한 패키지가 나열됩니다.
python -m pip install yourOwnPackageHere==
그런 다음 == 이후 버전을 설치 / 전환하기 위해 시도 할 버전으로 다시 실행하십시오.
답변
![](http://daplus.net/wp-content/uploads/2023/04/coupang_part-e1630022808943-2.png)