# 딕셔너리 딕셔너리는 파이썬에서 **키(key)**와 **값(value)** 쌍으로 이루어진 데이터를 저장하는 자료형입니다. 마치 사전처럼 키를 통해 값을 찾아볼 수 있어 연관 배열이라고도 불립니다. 딕셔너리는 순서가 없고, 키는 중복될 수 없다는 특징이 있습니다. - dict 딕셔너리는 키/값 형식의 자료형입니다. 중괄호(`{`, `}`)를 사용해서 표현합니다. ## 특징 ### 딕셔너리의 장점 * 빠른 검색: 키를 이용하여 값을 빠르게 찾을 수 있습니다. * 유연성: 다양한 자료형을 키와 값으로 사용할 수 있습니다. * 동적: 실행 중에 키-값 쌍을 추가, 수정, 삭제할 수 있습니다. ### 딕셔너리의 단점 * 순서 보장 X: 딕셔너리는 순서가 없기 때문에 요소를 순서대로 접근하기 어렵습니다. 단, Python 3.6 이상에서는 순서가 유지됩니다. ## 딕셔너리 생성 ```python a = {'name': 'Charlie', 'age': 14} b = dict(name='Steve', age=37) # dict()를 사용할 때에는 키를 따옴표로 묶지 않습니다. c = {} # 빈 딕셔너리를 만듭니다. 또는, d = dict() e = dict(zip(['name', 'age'], ['Jane', 24])) # zip()을 사용해서 키와 값을 묶을 수도 있습니다. f = dict([('name', 'Olaf'), ('age', 7)]) # 리스트 안에 튜플을 사용해서 생성할 수도 있습니다. g = dict({'name': 'Charlie', 'age': 14}) # dict() 안에 중괄호를 한 번 더 사용해도 됩니다. ``` ## 딕셔너리 요소 접근 딕셔너리의 키에 대괄호를 사용해서 아이템에 접근하거나 변경할 수 있습니다. ```python person = {'name': 'Charlie', 'age': 14} person['name'] # 'Charlie' person.get('name') # get() 메서드를 사용할 수도 있습니다. ``` `in` 연산자를 사용해서 딕셔너리에 해당 키가 존재하는지 확인할 수 있습니다. ```python person = {'name': 'Charlie', 'age': 14} if 'name' in person: print(person['name']) else: print("정보가 없습니다.") ``` 키의 갯수를 알고 싶으면 `len()`을 사용합니다. ```python len({'name': 'Charlie', 'age': 14}) # 2 ``` ## 딕셔너리 요소 추가, 수정, 삭제 ```python # 새로운 키-값 쌍 추가 student['address'] = '서울시' # 값 수정 student['age'] = 21 # 키 삭제 del student['score'] # 키를 제거하려면 `del`을 사용합니다. ``` 딕셔너리를 복제하려면 `deepcopy()`를 사용해야 합니다. ```python import copy y = deepcopy(a) ``` ## 딕셔너리의 메서드 - setdefault(키, 값) 키에 대한 기본값을 지정합니다. `update()`와 달리 해당 키가 이미 정의되어 있다면 값이 변경되지 않습니다. - update(키, 값) 키에 대한 값을 변경합니다. 키가 정의되어 있지 않다면 새로운 키가 등록됩니다. - pop(키, 기본값) 키에 대한 값을 반환하며, 딕셔너리에서는 제거됩니다. 매개변수에 기본값을 주면 해당 키가 없을 때에 그 값을 반환합니다. - popitem() 마지막 키/값 쌍을 튜플로 반환하고 삭제합니다. Python 3.5 이하에서는 임의의 키/값 쌍을 반환합니다. - clear() 모든 키/값 쌍을 삭제합니다. - get(키) : 키에 해당하는 값을 반환하고, 키가 없으면 기본값을 반환합니다. - items() : 키-값 쌍을 튜플 형태로 반환합니다. - keys() : 모든 키를 반환합니다. - values() : 모든 값을 반환합니다. ```python for key, value in {'a':100, 'b':200, 'c':300}.items(): print(key, value) ``` ```python # 학생들의 점수 저장 scores = {'수학': 90, '영어': 85, '과학': 95} # 모든 과목의 점수 출력 for subject, score in scores.items(): print(f"{subject}: {score}점") # 평균 점수 계산 total = sum(scores.values()) average = total / len(scores) print(f"평균 점수: {average}점") ``` ## 멀티 레벨 딕셔너리 딕셔너리 안에 딕셔너리를 넣으면 계층형 데이터 구조를 만들 수 있습니다. ```python a = { 'charlie': {'name': 'Charlie', 'age': 14}, 'steve': {'name': 'Steve', 'age': 37}, 'jane': {'name': 'Jane', 'age': 22} } ```