Python 딕셔너리 마스터하기: 생성, 조작, 고급 기법
Python 딕셔너리
이 종합 가이드는 Python 딕셔너리(사전)를 설명합니다. 생성, 접근, 요소 추가/삭제, 내장 메서드 활용법까지 다룹니다.
동영상: Python 딕셔너리로 키/값 쌍 저장하기
Python 딕셔너리는 키/값 쌍의 순서 없는 컬렉션입니다. 각 항목은 고유하고 불변인 키를 어떤 타입의 값과도 연결합니다.
Python 딕셔너리 생성하기
딕셔너리 정의는 간단합니다: 중괄호 {} 안에 쉼표로 구분된 키/값 쌍을 넣습니다. 키는 불변(문자열, 숫자, 불변 요소로 된 튜플)이어야 하며 고유해야 합니다. 값은 어떤 타입이든 가능하고 중복될 수 있습니다.
# 빈 딕셔너리
my_dict = {}
# 정수 키 딕셔너리
my_dict = {1: 'apple', 2: 'ball'}
# 혼합 키 딕셔너리
my_dict = {'name': 'John', 1: [2, 4, 3]}
# dict() 사용
my_dict = dict({1:'apple', 2:'ball'})
# 쌍 시퀀스에서 생성
my_dict = dict([(1,'apple'), (2,'ball')])
위 모든 방식이 같은 딕셔너리 구조를 만듭니다.
딕셔너리에서 요소 접근하기
딕셔너리 값은 키로 대괄호 [] 또는 get() 메서드로 조회. 대괄호는 키 없을 때 KeyError 발생; get()은 기본적으로 None 반환.
# get vs [] 조회
my_dict = {'name': 'Jack', 'age': 26}
# 출력: Jack
print(my_dict['name'])
# 출력: 26
print(my_dict.get('age'))
# 없는 키 접근 시 None 반환
print(my_dict.get('address'))
# KeyError
print(my_dict['address'])
출력
Jack 26 None Traceback (most recent call last): File "<string>", line 15, in <module> print(my_dict['address']) KeyError: 'address'
딕셔너리 요소 변경 및 추가
딕셔너리는 가변입니다. 기존 키에 할당하면 값 갱신, 새 키에 할당하면 새 항목 추가.
# 딕셔너리 요소 변경 및 추가
my_dict = {'name': 'Jack', 'age': 26}
# 값 갱신
my_dict['age'] = 27
# 출력: {'age': 27, 'name': 'Jack'}
print(my_dict)
# 항목 추가
my_dict['address'] = 'Downtown'
# 출력: {'address': 'Downtown', 'age': 27, 'name': 'Jack'}
print(my_dict)
출력
{'name': 'Jack', 'age': 27} {'name': 'Jack', 'age': 27, 'address': 'Downtown'}
딕셔너리에서 요소 제거하기
pop()으로 특정 키 삭제하며 값 반환. popitem()은 임의 쌍 제거, clear()는 전체 비우기. del 키워드로 개별 항목이나 변수 자체 삭제 가능.
# 딕셔너리 요소 제거
# 딕셔너리 생성
squares = {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# 특정 항목 제거, 값 반환
# 출력: 16
print(squares.pop(4))
# 출력: {1: 1, 2: 4, 3: 9, 5: 25}
print(squares)
# 임의 항목 제거, (키,값) 반환
# 출력: (5, 25)
print(squares.popitem())
# 출력: {1: 1, 2: 4, 3: 9}
print(squares)
# 모든 항목 제거
squares.clear()
# 출력: {}
print(squares)
# 딕셔너리 자체 삭제
del squares
# 에러 발생
print(squares)
출력
16 {1: 1, 2: 4, 3: 9, 5: 25} (5, 25) {1: 1, 2: 4, 3: 9} {} Traceback (most recent call last): File "<string>", line 30, in <module> print(squares) NameError: name 'squares' is not defined
Python 딕셔너리 메서드
아래 표는 주요 딕셔너리 메서드와 용도. 다수는 뒤따르는 예제에서 시연.
| 메서드 | 설명 |
| clear() | 딕셔너리에서 모든 항목 제거 |
| copy() | 딕셔너리의 얕은 복사본 반환 |
| fromkeys(seq[, v]) | seq에서 새 딕셔너리 생성, 모든 키를 v(기본 None)로 설정 |
| get(key[,d]) | key의 값 반환; 없으면 d(기본 None) 반환 |
| items() | 딕셔너리의 (키, 값) 쌍 뷰 반환 |
| keys() | 딕셔너리의 키 뷰 반환 |
| pop(key[,d]) | key 삭제 후 값 또는 d 반환; 키 없는데 d 없으면 KeyError |
| popitem() | 임의 (키,값) 쌍 제거 및 반환; 비었으면 KeyError |
| setdefault(key[,d]) | key 값 반환; 없으면 key에 d(기본 None) 삽입 후 d 반환 |
| update([other]) | other에서 키/값 쌍 삽입/갱신, 기존 키 덮어씀 |
| values() | 딕셔너리의 값 뷰 반환 |
예제 사용:
# 딕셔너리 메서드
marks = {}.fromkeys(['Math', 'English', 'Science'], 0)
# 출력: {'English': 0, 'Math': 0, 'Science': 0}
print(marks)
for item in marks.items():
print(item)
# 출력: ['English', 'Math', 'Science']
print(list(sorted(marks.keys())))
출력
{'Math': 0, 'English': 0, 'Science': 0} ('Math', 0) ('English', 0) ('Science', 0) ['English', 'Math', 'Science']
Python 딕셔너리 컴프리헨션
딕셔너리 컴프리헨션은 이터러블에서 딕셔너리를 간결하게 만드는 문법. 패턴: {key: value for element in iterable}.
# 딕셔너리 컴프리헨션
squares = {x: x*x for x in range(6)}
print(squares)
출력
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
명령형 버전과 동등:
squares = {}
for x in range(6):
squares[x] = x*x
print(squares)
출력
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
컴프리헨션에 여러 루프와 if 필터 포함 가능. 예: 홀수 제곱만.
# 조건부 딕셔너리 컴프리헨션
odd_squares = {x: x*x for x in range(11) if x % 2 == 1}
print(odd_squares)
출력
{1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
자세한 내용은 Python 딕셔너리 컴프리헨션 참조.
기타 딕셔너리 연산
딕셔너리 멤버십 테스트
in 연산자로 키 존재 여부 확인; 값은 검사하지 않음.
# 딕셔너리 키 멤버십 테스트
squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
# 출력: True
print(1 in squares)
# 출력: True
print(2 not in squares)
# 키만 테스트, 값 아님
# 출력: False
print(49 in squares)
출력
True True False
딕셔너리 순회하기
키를 직접 순회하며 값 접근.
# 딕셔너리 순회
squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
for i in squares:
print(squares[i])
출력
1 9 25 49 81
딕셔너리 내장 함수
all(), any(), len(), sorted() 같은 표준 함수가 딕셔너리에 자주 적용됨.
| 함수 | 설명 |
| all() | 모든 키가 True로 평가되면 True(빈 딕셔너리도 True) |
| any() | 어떤 키라도 True면 True; 빈 딕셔너리는 False |
| len() | 키/값 쌍 개수 |
| cmp() | 두 딕셔너리 비교(Python 3에서 제거됨) |
| sorted() | 정렬된 키 리스트 반환 |
예제:
# 딕셔너리 내장 함수
squares = {0: 0, 1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
# 출력: False
print(all(squares))
# 출력: True
print(any(squares))
# 출력: 6
print(len(squares))
# 출력: [0, 1, 3, 5, 7, 9]
print(sorted(squares))
출력
False True 6 [0, 1, 3, 5, 7, 9]