파이썬(Python)의 딕셔너리(dictionary)는 순서가 없고, 변경 가능하며, 인덱싱이 지원되는 자료구조입니다. 각 항목은 키(key)와 값(value)으로 구성되며, 키를 통해 해당 값에 접근할 수 있습니다. 이 글에서는 반복문을 실행하는 도중에도 안전하게 딕셔너리의 항목을 삭제하는 다양한 방법을 살펴보겠습니다.
del 키워드와 키를 사용하는 방법
가장 기본적인 방법은 삭제할 키들을 미리 추출해 둔 뒤, del 키워드로 해당 키-값 쌍을 제거하는 것입니다. 아래 예제에서는 리스트 컴프리헨션(list comprehension)을 사용해 삭제 대상인 키(2와 3)를 먼저 모으고, 그 후에 반복하면서 삭제를 진행합니다.
예제
# 주어진 딕셔너리
ADict = {1: 'Mon', 2: 'Tue', 3: 'Wed', 4: 'Thu', 5: 'Fri'}
# 값이 2, 3에 해당하는 키 추출
to_del = [key for key in ADict if key in (2, 3)]
# 키 삭제
for key in to_del:
del ADict[key]
# 새로운 딕셔너리 출력
print(ADict)출력 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
{1: 'Mon', 4: 'Thu', 5: 'Fri'}list()로 키 목록을 만들어 조건에 따라 삭제하는 방법
딕셔너리를 직접 순회하면서 삭제하면 RuntimeError가 발생할 수 있으므로, list() 함수로 키 목록의 복사본을 만든 후 순회하는 것이 안전합니다. 아래 예제에서는 키를 2로 나눈 나머지가 0인 경우, 즉 짝수 키만 골라서 삭제합니다.
예제
# 주어진 딕셔너리
ADict = {1: 'Mon', 2: 'Tue', 3: 'Wed', 4: 'Thu', 5: 'Fri'}
# 짝수 값을 가진 키 삭제
for key in list(ADict):
if (key % 2) == 0:
del ADict[key]
# 새로운 딕셔너리 출력
print(ADict)출력 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
{1: 'Mon', 3: 'Wed', 5: 'Fri'}items() 메서드를 활용하여 삭제하는 방법
키뿐만 아니라 items() 메서드를 사용해 키와 값을 함께 확인하면서 삭제 대상을 선정할 수도 있습니다. 다만 실제 삭제는 여전히 키를 통해 수행해야 하므로, 조건에 맞는 키를 별도의 리스트에 저장한 뒤 일괄 삭제하는 방식을 사용합니다. 아래 예제에서는 값이 'Tue' 또는 'Fri'인 항목을 찾아 삭제합니다.
예제
# 주어진 딕셔너리
ADict = {1: 'Mon', 2: 'Tue', 3: 'Wed', 4: 'Thu', 5: 'Fri'}
NewDict = []
# 값이 'Tue', 'Fri'인 항목의 키 추출
for key, val in ADict.items():
if val in ('Tue', 'Fri'):
NewDict.append(key)
# 해당 키들 삭제
for i in NewDict:
del ADict[i]
# 새로운 딕셔너리 출력
print(ADict)출력 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
{1: 'Mon', 3: 'Wed', 4: 'Thu'}정리
반복문 도중 딕셔너리의 크기를 직접 변경하면 오류가 발생할 수 있기 때문에, 삭제할 키를 미리 리스트나 컴프리헨션으로 확보한 후 처리하는 것이 가장 안전하고 권장되는 패턴입니다. 상황에 따라 del, list(), items()를 적절히 조합하여 사용하면 됩니다.