파이썬 사전

파이썬 사전

QA

파이썬 사전

답변 1

본문

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에 관한 질문은 언제든지 환영입니다!

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

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 209
© SIRSOFT
현재 페이지 제일 처음으로