안녕하세요, 유용한 강의 정말 잘 듣고 있습니다.
25.8 딕셔너리 특정값 삭제하기 질문
이곳에서 저는 if문에 조건을 2개 붙였는데,
keys = input().split()
values = map(int, input().split())
x = dict(zip(keys, values))
for key, value in x.items():
if key == 'delta' or value == 30:
del x[key]
print(x)
이런 오류가 뜨더라구요.
Traceback (most recent call last):
File "C:/Users/jsme8/AppData/Local/Programs/Python/Python310/Projects/1007 딕셔너리 심사.py", line 6, in <module>
for key, value in x.items():
RuntimeError: dictionary changed size during iteration
구글링해보니
if 문에 조건 and와 or로 연결하는 건 맞는데,
딕셔너리에서는 조건 2개가 적용이 안 되는 건가요?
궁금합니다!
그리고 제가 통과한 방법은 결국
x = {key: value for key, value in x.items() if key != 'delta' and value != 30}
print(x)
이것이었습니다.
그런데 여기는 or하면 결과가 제대로 안 나오고,
and하면 통과가 되더라구요.
논리상 or이 맞는 것 같은데... 왜 그런걸까요? ㅠㅠㅠ
RuntimeError: dictionary changed size during iteration
에러 메시지를 읽는 습관을 들이는 게 좋습니다.
반복문을 사용할 때 딕셔너리의 크기는 바꿀 수 없습니다.
x.del로 항목을 삭제하면 안 됩니다. 항목이 10개인데 삭제해서 9개가 되면 반복 횟수가 틀려지고, 이는 잘못된 동작의 원인이 됩니다.
조건을 만족하지 않을 때 실행을 건너 뛰는 게 정답입니다.
항목 삭제가 필요하다면 반복문이 끝난 다음에 해야 합니다.