파이썬 딕셔너리 활용법 완벽 가이드
파이썬 딕셔너리(사전)를 다루는 방법을 배우고 싶으신가요? 이 튜토리얼에서는 파이썬 딕셔너리에서 데이터를 읽고, 수정하고, 다양한 작업을 수행하는 데 사용되는 주요 메서드들을 자세히 살펴봅니다.
먼저, 파이썬 딕셔너리의 기본 개념을 간단히 복습한 다음, 실제 예시 딕셔너리를 만들고 다양한 딕셔너리 메서드를 적용하여 데이터를 조작해 보겠습니다.
시작해 볼까요?
파이썬 딕셔너리 개요
딕셔너리는 파이썬에 내장된 강력한 데이터 구조 중 하나입니다. 키-값 쌍으로 데이터를 저장하여, 키와 값 사이의 관계를 명확하게 정의하고 관리할 수 있습니다.
딕셔너리의 키는 고유해야 하며 (해시 가능해야 함), 이 키들을 사용하여 해당 값을 빠르게 검색하거나 다양한 내장 메서드를 활용할 수 있습니다. (이후에 자세히 알아볼 예정입니다.)
파이썬 딕셔너리를 생성할 때, 모든 키-값 쌍을 미리 정의하거나 빈 딕셔너리를 초기화한 후 키-값 쌍을 하나씩 추가하는 방식 모두 가능합니다.
>>> dict1 = {'언어':'파이썬','좋아요':True} >>> type(dict1) <class 'dict'> # 또는 다음과 같이 할 수도 있습니다. >>> dict1 = {} >>> dict1['언어']='파이썬' >>> dict1['좋아요']=True
자주 사용되는 파이썬 딕셔너리 메서드
참고: 코드 예제를 직접 따라 하려면 파이썬 3.7 이상 버전이 설치되어 있어야 합니다.
파이썬 REPL(대화형 인터프리터)에서 코드를 직접 입력하며 따라 하거나, 온라인 파이썬 편집기를 활용할 수도 있습니다.
>>> person = {'이름':'앨리스', ... '도시':'포틀랜드', ... '관심사':'프로그래밍', ... '직업':'개발자' ... }
이제 파이썬 딕셔너리를 초기화했으니, 다양한 딕셔너리 메서드를 하나씩 살펴봅시다.
keys() 메서드로 딕셔너리 키 가져오기
파이썬 딕셔너리를 사용할 때, 가장 기본적인 작업 중 하나는 딕셔너리에 저장된 모든 키, 값, 그리고 키-값 쌍에 접근하는 것입니다. 딕셔너리에 포함된 키들을 가져오려면 다음과 같이 keys() 메서드를 호출하면 됩니다.
>>> person.keys() dict_keys(['이름', '도시', '관심사', '직업'])
values() 메서드로 딕셔너리 값 가져오기
values() 메서드는 딕셔너리의 모든 값을 반환합니다. 이 메서드는 값을 추가로 처리해야 할 경우에 매우 유용하게 활용할 수 있습니다.
‘person’ 딕셔너리의 모든 값을 가져와 보겠습니다.
>>> person.values() dict_values(['앨리스', '포틀랜드', '프로그래밍', '개발자'])
items() 메서드로 키-값 쌍 가져오기
items() 메서드는 키-값 쌍을 튜플 형태로 묶어 리스트 형태로 반환합니다. ‘person’ 딕셔너리에 이 메서드를 적용하면, 키-값 튜플들이 리스트 형태로 반환됩니다.
>>> person.items() dict_items([('이름', '앨리스'), ('도시', '포틀랜드'), ('관심사', '프로그래밍'), ('직업', '개발자')])
copy() 메서드로 얕은 복사본 생성하기
copy() 메서드는 파이썬 딕셔너리의 얕은 복사본을 생성하여 반환합니다.
>>> person_cpy = person.copy()
여기서 ‘person_cpy’는 ‘person’ 딕셔너리의 얕은 복사본입니다. 복사본의 ‘이름’ 키를 ‘밥’으로 변경하여 원본에 영향을 주지 않는지 확인해 보겠습니다.
>>> person_cpy['이름'] = '밥' >>> person_cpy
이제 딕셔너리 내용을 확인해 보면 ‘이름’이 ‘밥’으로 성공적으로 변경된 것을 볼 수 있습니다.
{ '이름': '밥', '도시': '포틀랜드', '관심사': '프로그래밍', '직업': '개발자' }
하지만, 원본인 ‘person’ 딕셔너리는 변경되지 않고 그대로 유지됩니다.
>>> person
{ '이름': '앨리스', '도시': '포틀랜드', '관심사': '프로그래밍', '직업': '개발자' }
setdefault() 메서드로 기본값 설정하기
파이썬 딕셔너리를 사용할 때, 딕셔너리에 존재하지 않는 키에 접근하려고 하면 ‘KeyError’ 예외가 발생하는 것이 일반적입니다. 다음은 ‘나이’ 키에 접근하려고 할 때 발생하는 예시입니다.
>>> person['나이'] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: '나이'
위와 같이 직접 접근하는 대신, 내장 메서드인 setdefault() 와 get() 메서드를 사용하여 이러한 오류를 방지할 수 있습니다.
setdefault(key) 메서드는 딕셔너리에 해당 키가 존재하는 경우 dict[‘key’]를 반환합니다.
>>> person.setdefault('이름') '앨리스'
만약 키가 딕셔너리에 없다면, 해당 키를 기본값인 None과 함께 추가합니다.
>>> person.setdefault('주소') >>> person
여기서 ‘주소’ 키는 ‘person’ 딕셔너리에 원래 존재하지 않았습니다. 하지만 setdefault() 메서드 사용 후 기본값인 None과 함께 추가된 것을 확인할 수 있습니다.
{ '이름': '앨리스', '도시': '포틀랜드', '관심사': '프로그래밍', '직업': '개발자', '주소': None }
이제 ‘주소’ 키에 특정 주소 값을 할당할 수 있습니다.
>>> person['주소'] = "서울시 강남구" >>> person
{ '이름': '앨리스', '도시': '포틀랜드', '관심사': '프로그래밍', '직업': '개발자', '주소': '서울시 강남구' }
메서드 호출 시점에 값을 직접 지정할 수도 있습니다.
>>> person.setdefault('국가','대한민국') '대한민국' >>> person
‘국가’ 키는 ‘person’ 딕셔너리에 원래 존재하지 않았으므로, 값 ‘대한민국’과 함께 추가된 것을 확인할 수 있습니다.
{ '이름': '앨리스', '도시': '포틀랜드', '관심사': '프로그래밍', '직업': '개발자', '주소': '서울시 강남구', '국가': '대한민국' }
get() 메서드로 특정 값 가져오기
get() 메서드는 지정된 키에 해당하는 값을 반환합니다. 또한, 딕셔너리에서 키를 찾을 수 없는 경우 반환할 다른 기본값을 선택적으로 지정할 수도 있습니다.
‘이름’ 키에 해당하는 값에 접근하려고 하면, 키가 존재하므로 ‘앨리스’를 얻게 됩니다.
>>> person.get('이름') '앨리스'
‘person’ 딕셔너리에는 ‘학점’ 키가 없습니다. 따라서 값을 가져오려고 하면 파이썬 REPL에서 아무것도 얻지 못합니다. 하지만 값을 출력해보면 None이 표시됩니다.
>>> person.get('학점') >>> print(person.get('학점')) None
하지만, 선택적 기본값을 제공하면 None 대신 해당 값을 얻을 수 있습니다.
>>> person.get('학점','찾을 수 없음') '찾을 수 없음'
하지만 get() 메서드는 딕셔너리에 ‘학점’ 키를 추가하지 않습니다.
>>> person
{ '이름': '앨리스', '도시': '포틀랜드', '관심사': '프로그래밍', '직업': '개발자', '주소': '서울시 강남구', '국가': '대한민국' }
setdefault() vs get() 메서드 비교
setdefault()와 get() 메서드 모두 KeyError를 처리하는 데 사용할 수 있지만, 각 메서드의 차이점을 정리해 보겠습니다.
- dict.setdefault(key,val)는 딕셔너리에 키가 없을 경우, 기본값 val을 가진 키를 추가합니다. val이 제공되지 않으면, 기본값 None과 함께 키가 추가됩니다.
- dict.get(key,val)는 딕셔너리에서 해당 키의 값을 반환합니다. 키가 존재하지 않으면 val(제공된 경우) 또는 None을 반환하며, 딕셔너리에 키를 추가하지는 않습니다.
파이썬에서는 defaultdict를 사용하여 KeyError를 더 효과적으로 처리할 수도 있습니다.
update() 메서드로 딕셔너리 내용 업데이트
다른 딕셔너리의 키-값 쌍을 사용하여 기존 파이썬 딕셔너리를 업데이트할 수 있습니다. update() 메서드를 사용하면 파이썬 iterable 객체의 내용을 딕셔너리에 추가할 수도 있습니다.
‘more_details’ 딕셔너리를 정의해 보겠습니다. 그런 다음, ‘more_details’ 딕셔너리의 내용으로 ‘person’ 딕셔너리를 업데이트해 보겠습니다.
>>> more_details = {'취미':'노래', '좋아하는것':'단것'} >>> person.update(more_details)
아래 출력 결과를 보면, ‘취미’와 ‘좋아하는것’ 키가 ‘person’ 딕셔너리에 성공적으로 추가된 것을 확인할 수 있습니다.
>>> person
{ '이름': '앨리스', '도시': '포틀랜드', '관심사': '프로그래밍', '직업': '개발자', '주소': '서울시 강남구', '국가': '대한민국', '취미': '노래', '좋아하는것': '단것' }
popitem() 메서드로 마지막으로 추가된 항목 제거
popitem() 딕셔너리 메서드를 사용하면 딕셔너리에 마지막으로 추가된 키-값 쌍을 제거할 수 있습니다.
>>> person.popitem() ('좋아하는것', '단것')
보시다시피, ‘person’ 딕셔너리에서 popitem() 메서드를 호출하면, 딕셔너리에 마지막으로 추가된 항목인 (‘좋아하는것’, ‘단것’) 키-값 쌍이 반환됩니다.
또한, 이 메서드는 해당 키-값 쌍을 딕셔너리에서 제거합니다. 딕셔너리의 내용을 확인하여 이를 확인할 수 있습니다.
>>> person
{ '이름': '앨리스', '도시': '포틀랜드', '관심사': '프로그래밍', '직업': '개발자', '주소': '서울시 강남구', '국가': '대한민국', '취미': '노래' }
pop() 메서드로 특정 키-값 쌍 제거
popitem() 딕셔너리 메서드는 파이썬 딕셔너리에서 마지막 키-값 쌍을 제거하고 반환하는 것을 알았습니다. 하지만 때로는 마지막으로 추가된 키-값 쌍이 아닌 다른 항목을 제거해야 할 수도 있습니다.
이럴 때는 파이썬 딕셔너리 메서드인 pop()을 사용할 수 있습니다. dict.pop(key)를 사용하면 해당 키의 값을 반환하고, 딕셔너리에서 해당 키-값 쌍을 제거합니다.
예를 들어 다음과 같습니다.
>>> person.pop('취미') '노래'
‘취미’ 키에 해당하는 항목을 pop() 메서드를 사용하여 제거하면, 해당 항목이 딕셔너리에서 더 이상 존재하지 않는 것을 확인할 수 있습니다.
>>> person
{ '이름': '앨리스', '도시': '포틀랜드', '관심사': '프로그래밍', '직업': '개발자', '주소': '서울시 강남구', '국가': '대한민국' }
존재하지 않는 키를 전달하면 KeyError 예외가 발생합니다.
>>> person.pop('나이') Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: '나이'
여기서는 ‘나이’ 키가 ‘person’ 딕셔너리에 없으므로 KeyError 예외가 발생합니다.
기본적으로 마지막 항목을 제거하는 리스트의 pop() 메서드와 달리, 딕셔너리의 pop() 메서드는 키를 반드시 지정해야 합니다. 메서드에 키를 지정하지 않으면 오류가 발생합니다.
>>> person.pop() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: pop expected at least 1 argument, got 0
clear() 메서드로 모든 딕셔너리 항목 삭제
딕셔너리 pop() 및 popitem() 메서드는 한 번에 하나의 키-값 쌍만 제거할 수 있습니다. 딕셔너리의 모든 항목을 한 번에 제거하려면 clear() 메서드를 사용할 수 있습니다.
>>> person.clear() >>> person {}
표시된 것처럼 ‘person’ 딕셔너리에서 clear() 메서드를 호출하면 모든 키-값 쌍이 제거되고, ‘person’ 딕셔너리는 이제 비어 있습니다.
파이썬 딕셔너리 메서드 요약
다음은 지금까지 배운 파이썬 딕셔너리 메서드에 대한 간략한 요약입니다.
메서드 | 구문 | 설명 |
keys() | dict1.keys() | dict1의 키들을 반환합니다. |
values() | dict1.values() | dict1의 값들을 반환합니다. |
items() | dict1.items() | dict1의 모든 키-값 쌍을 리스트 형태로 반환합니다. |
copy() | dict1.copy() | dict1의 얕은 복사본을 반환합니다. |
setdefault() | dict1.setdefault(key, default_value) | dict1에 해당 키가 있는 경우 dict1[key]를 반환합니다. 키가 없다면, 선택적 default_value를 사용하여 해당 키를 dict1에 추가합니다. 지정하지 않으면 기본값은 None입니다. |
get() | dict1.get(key,default_value) | dict1에 해당 키가 있으면 dict1[key]를 반환합니다. 키가 없다면 default_value를 반환합니다. 만약 키가 dict1에 없고 default_value가 지정되지 않은 경우에는 None을 반환합니다. |
update() | dict1.update(iterable1) | iterable1의 키-값 쌍을 사용하여 dict1을 업데이트합니다. |
popitem() | dict1.popitem() | dict1에서 마지막으로 추가된 키-값 쌍을 제거하고 반환합니다. |
pop() | dict1.pop(key) | dict1에서 해당 키의 값을 제거하고 반환합니다. 만약 dict1에 해당 키가 없다면 KeyError를 발생시킵니다. |
clear() | dict1.clear() | dict1에서 모든 항목을 제거합니다. |
결론
이 튜토리얼에서는 파이썬 딕셔너리에서 데이터를 읽고, 업데이트하고, 삭제하는 다양한 작업들을 수행하는 방법을 살펴보았습니다. 또한, get() 및 setdefault() 메서드를 사용하여 KeyError 예외를 효과적으로 처리하는 방법을 배웠습니다. 이를 통해, 기본값을 반환하거나 딕셔너리에 기본값을 가진 항목을 추가하는 것이 가능해졌습니다. 키나 값 기준으로 딕셔너리 항목들을 정렬하는 방법도 있습니다.
다음으로는 유용한 파이썬 리스트 메서드 목록을 확인해 보세요. 즐거운 코딩하세요!