[해결됨] Python3에서 RuntimeError: 사전 요소를 삭제할 때 반복 중에 사전이 크기를 변경했습니다.

1. 문제 재현

문제 코드

dic = {
    
    'a': 1, 'b': 0, 'c': 1, 'd': 0}
filters = ["a", "c"]
for k in dic:
    if k not in filters:
        dic.pop(k)
print(dic)

pep-0234/에 따르면 순회 중에 사전을 수정할 수 없다는 것을 알 수 있으므로 사전을 순회할 때 사전을 순회하는 동안 사전 요소를 삭제하려고 하면 오류가 보고됩니다.RuntimeError: dictionary changed size during iteration
여기에 이미지 설명 삽입

2. 솔루션

2.1 모든 키를 목록 또는 컬렉션으로 변환하고 삭제하기 전에 저장

사전에 있는 모든 키를 목록으로 변환하거나 설정하여 먼저 저장한 다음 삭제 작업을 수행하므로 복구된 코드는 다음과 같습니다.

dic = {
    
    'a': 1, 'b': 0, 'c': 1, 'd': 0}
filters = ["a", "c"]
for k in list(dic):
    if k not in filters:
        dic.pop(k)
print(dic)

2.2 삭제할 키를 목록 또는 컬렉션으로 변환하고 저장한 후 삭제

먼저 삭제할 키를 사전에서 찾아 목록 또는 집합으로 저장한 다음 삭제 작업을 수행하므로 복구 코드도 다음과 같을 수 있습니다.

dic = {
    
    'a': 1, 'b': 0, 'c': 1, 'd': 0}
filters = ["a", "c"]
delete_keys = [k for k in dic if k not in filters]
for k in delete_keys:
    dic.pop(k)
print(dic)

3. 관련 기사

Supongo que te gusta

Origin blog.csdn.net/craftsman2020/article/details/129026111
Recomendado
Clasificación