파이썬 사전

파이썬 사전

QA

파이썬 사전

본문

my_dict = {'apple': 100, 'melon': 200, 'strawberry': 150}
for key, value in my_dict.items():
    if value == 200:
        del my_dict[key]
 

이거 왜 에러가 발생하는가요

이 질문에 댓글 쓰기 :

답변 1

안녕하세요? ^^

말씀하신 스크립트에서 "dictionary changed size during iteration" 에러가 발생하는 것은

사실상 버그에 가깝습니다 ㅠㅠ

공식문서에서도 .items() 메서드는 '리스트'를 반환한다고 기술되어 있죠 -_-;;;

이를 우회적으로 해결하는 방법은 다음과 같습니다.

 

1. 리스트로 감싸서 해결하는 방법


my_dict = {'apple': 100, 'melon': 200, 'strawberry': 150}
for key, value in list(my_dict.items()):
    if value == 200:
        del my_dict[key]

 

2. 리스트와 키로 해결하는 방법


my_dict = {'apple': 100, 'melon': 200, 'strawberry': 150}
for x in list(my_dict):
    if my_dict[x] == 200:
        del my_dict[x]

 

3. .copy() 메서드로 해결하는 방법


my_dict = {'apple': 100, 'melon': 200, 'strawberry': 150}
for x in my_dict.copy():
    if my_dict[x] == 200:
        del my_dict[x]

 

4. comprehension을 사용하는 방법


my_dict = {k: v for k, v in my_dict.items() if v != 200}

 

Python에 관한 질문은 언제든지 환영입니다!

그럼 즐거운 불금 되세요! ^-^

답변을 작성하시기 전에 로그인 해주세요.
전체 123,732 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT