Files
python-examples/doc/03_05_dict.md
2025-01-20 02:26:20 +09:00

4.2 KiB

딕셔너리

딕셔너리는 파이썬에서 **키(key)**와 값(value) 쌍으로 이루어진 데이터를 저장하는 자료형입니다. 마치 사전처럼 키를 통해 값을 찾아볼 수 있어 연관 배열이라고도 불립니다. 딕셔너리는 순서가 없고, 키는 중복될 수 없다는 특징이 있습니다.

  • dict

    딕셔너리는 키/값 형식의 자료형입니다. 중괄호({, })를 사용해서 표현합니다.

특징

딕셔너리의 장점

  • 빠른 검색: 키를 이용하여 값을 빠르게 찾을 수 있습니다.
  • 유연성: 다양한 자료형을 키와 값으로 사용할 수 있습니다.
  • 동적: 실행 중에 키-값 쌍을 추가, 수정, 삭제할 수 있습니다.

딕셔너리의 단점

  • 순서 보장 X: 딕셔너리는 순서가 없기 때문에 요소를 순서대로 접근하기 어렵습니다. 단, Python 3.6 이상에서는 순서가 유지됩니다.

딕셔너리 생성

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() 안에 중괄호를 한 번 더 사용해도 됩니다.

딕셔너리 요소 접근

딕셔너리의 키에 대괄호를 사용해서 아이템에 접근하거나 변경할 수 있습니다.

person = {'name': 'Charlie', 'age': 14}
person['name'] # 'Charlie'

person.get('name') # get() 메서드를 사용할 수도 있습니다.

in 연산자를 사용해서 딕셔너리에 해당 키가 존재하는지 확인할 수 있습니다.

person = {'name': 'Charlie', 'age': 14}
if 'name' in person:
    print(person['name'])
else:
    print("정보가 없습니다.")

키의 갯수를 알고 싶으면 len()을 사용합니다.

len({'name': 'Charlie', 'age': 14}) # 2

딕셔너리 요소 추가, 수정, 삭제

# 새로운 키-값 쌍 추가
student['address'] = '서울시'

# 값 수정
student['age'] = 21

# 키 삭제
del student['score'] # 키를 제거하려면 `del`을 사용합니다.

딕셔너리를 복제하려면 deepcopy()를 사용해야 합니다.

import copy
y = deepcopy(a)

딕셔너리의 메서드

  • setdefault(키, 값)

    키에 대한 기본값을 지정합니다. update()와 달리 해당 키가 이미 정의되어 있다면 값이 변경되지 않습니다.

  • update(키, 값)

    키에 대한 값을 변경합니다. 키가 정의되어 있지 않다면 새로운 키가 등록됩니다.

  • pop(키, 기본값)

    키에 대한 값을 반환하며, 딕셔너리에서는 제거됩니다. 매개변수에 기본값을 주면 해당 키가 없을 때에 그 값을 반환합니다.

  • popitem()

    마지막 키/값 쌍을 튜플로 반환하고 삭제합니다. Python 3.5 이하에서는 임의의 키/값 쌍을 반환합니다.

  • clear()

    모든 키/값 쌍을 삭제합니다.

  • get(키) : 키에 해당하는 값을 반환하고, 키가 없으면 기본값을 반환합니다.

  • items() : 키-값 쌍을 튜플 형태로 반환합니다.

  • keys() : 모든 키를 반환합니다.

  • values() : 모든 값을 반환합니다.

for key, value in {'a':100, 'b':200, 'c':300}.items():
    print(key, value)
# 학생들의 점수 저장
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}점")

멀티 레벨 딕셔너리

딕셔너리 안에 딕셔너리를 넣으면 계층형 데이터 구조를 만들 수 있습니다.

a = {
    'charlie': {'name': 'Charlie', 'age': 14},
    'steve': {'name': 'Steve', 'age': 37},
    'jane': {'name': 'Jane', 'age': 22}
}