반응형
질문
어떤 리스트의 사전이 있다고 가정해봅시다:
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
가 대신 뷰 객체를 반환하므로 이 오류를 해결하지 못합니다.
반응형
댓글