본문 바로가기
Python/Python FAQ

Python "RuntimeError: dictionary changed size during iteration" 오류를 피하는 방법은 무엇인가요?, How can I avoid "RuntimeError: dictionary changed size during iteration" error?

by 베타코드 2023. 10. 24.
반응형

질문


어떤 리스트의 사전이 있다고 가정해봅시다:

d = {'a': [1], 'b': [1, 2], 'c': [], 'd':[]}

이제 값이 빈 리스트인 키-값 쌍을 제거하고 싶습니다. 다음 코드를 시도해봤습니다:

for i in d:
    if not d[i]:
        d.pop(i)

하지만 이렇게 하면 오류가 발생합니다:

RuntimeError: dictionary changed size during iteration

사전을 반복하는 동안에는 항목을 추가하거나 제거할 수 없다는 것을 이해합니다. 이 문제를 해결하기 위해 이 제한을 어떻게 우회할 수 있을까요?


이로 인해 문제가 발생할 수 있고 그 이유에 대한 인용은 Modifying a Python dict while iterating over it에서 확인할 수 있습니다.


답변


Python 3.x와 2.x에서는 list를 사용하여 키의 복사본을 만들 수 있습니다:

for i in list(d):

Python 2.x에서 .keys를 호출하면 수정 가능한 dict를 반복하면서 키의 복사본이 생성되었습니다:

for i in d.keys():

그러나 Python 3.x에서는 .keys가 대신 뷰 객체를 반환하므로 이 오류를 해결하지 못합니다.

반응형

댓글