리스트 안에 여러 개의 딕셔너리가 들어 있을 때, 특정 값이 존재하지 않는(또는 조건에 부합하는) 딕셔너리를 제거해야 하는 경우가 있습니다. 이럴 때는 간단한 반복문과 'del' 연산자, 그리고 'break' 문만 있으면 손쉽게 처리할 수 있습니다.
예제
아래 예제를 통해 실제 동작 과정을 살펴보겠습니다.
my_list = [{"code" : 1, "fun" : "learn"},
{"code" : 2, "fun" : "code"},
{"code" : 3, "fun" : "test"},
{"code" : 4, "fun" : "teach"},
{"code" : 4, "fun" : "make"},
{"code" : 4, "fun" : "object"}]
print("딕셔너리 리스트 : " )
print(my_list)
for index in range(len(my_list)):
if my_list[index]['code'] == 3:
del my_list[index]
break
print("결과 리스트 : ")
print(my_list)출력 결과
딕셔너리 리스트 :
[{'code': 1, 'fun': 'learn'}, {'code': 2, 'fun': 'code'}, {'code': 3, 'fun': 'test'}, {'code': 4, 'fun': 'teach'},
{'code': 4, 'fun': 'make'}, {'code': 4, 'fun': 'object'}]
결과 리스트 :
[{'code': 1, 'fun': 'learn'}, {'code': 2, 'fun': 'code'}, {'code': 4, 'fun': 'teach'}, {'code': 4, 'fun': 'make'},
{'code': 4, 'fun': 'object'}]코드 설명
여러 개의 딕셔너리를 요소로 가지는 리스트를 정의한 뒤, 콘솔에 출력하여 초기 상태를 확인합니다.
for 문으로 리스트 전체를 순회하면서, 각 인덱스 위치의 딕셔너리에서 'code' 키의 값이 3과 일치하는지 검사합니다.
조건이 일치하면 del 연산자로 해당 딕셔너리를 리스트에서 삭제하고, break 문으로 반복문을 즉시 종료합니다. 삭제 후에는 인덱스가 밀릴 수 있으므로, 단 하나의 항목만 제거할 때는 이처럼 break로 빠져나오는 것이 안전합니다.
마지막으로 수정된 리스트를 콘솔에 출력합니다.
참고: 더 간결한 대안
리스트 컴프리헨션(list comprehension)을 사용하면 위 로직을 한 줄로 표현할 수도 있습니다. 새로운 리스트를 만드는 방식이기 때문에 순회 중 삭제로 인한 인덱스 오류 걱정도 없습니다.
my_list = [d for d in my_list if d['code'] != 3]