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}
}