채택완료

파이썬 사전

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

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

|

답변 1개 / 댓글 1개

채택된 답변
+20 포인트

안녕하세요? ^^

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

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

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

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

 

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

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

 

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

Copy
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() 메서드로 해결하는 방법

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을 사용하는 방법

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

 

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

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

답변에 대한 댓글 1개

답변 채택해주셔서 감사합니다 ^-^

답변을 작성하려면 로그인이 필요합니다.