점프 투 파이썬 DAY6(딕셔너리 자료형)

정지범·2026년 9월 15일

점프 투 파이썬

목록 보기
5/37

! 지금까지 리스트와 튜플처럼 여러 개의 값을 저장할 수 있는 자료형을 알아보았다.

  • 이번에는 Key와 Value를 한 쌍으로 저장하는 딕셔너리(dictionary) 자료형에 대해 알아보자.

  • 예를 들어 사람에 대한 정보를 저장한다고 생각해 보자.

    • 이름 → 홍길동
    • 나이 → 20
    • 전화번호 → 010-1234-5678
  • 이처럼 어떤 값을 찾기 위한 기준(Key)과 그에 해당하는 값(Value)을 서로 연결해서 저장할 수 있다.

  • 다른 프로그래밍 언어에서는 이러한 형태를 연관 배열(associative array) 또는 해시(hash)라고 부르기도 한다.

1. 딕셔너리란?

딕셔너리(dictionary)는 영어로 사전이라는 뜻이다.

  • 실제 사전에서는 단어를 찾으면 그 단어의 뜻을 확인할 수 있다.
apple → 사과
baseball → 야구
python → 파이썬
  • 파이썬의 딕셔너리도 비슷한 방식으로 동작한다.
  • 특정 Key를 이용해서 그 Key에 연결된 Value를 찾는다.
{"apple": "사과", "baseball": "야구"}
  • 여기에서 "apple"과 "baseball"은 Key이다.
  • "사과"와 "야구"는 각각의 Key에 대응하는 Value이다.

리스트와 딕셔너리의 값을 가져오는 방식에는 차이가 있다.

a = ['apple', 'banana', 'orange']
  • 리스트는 다음처럼 위치(index)를 이용한다.
a[0]
'apple'

  • 반면 딕셔너리는 Key를 이용한다.
a = {'apple': '사과', 'banana': '바나나'}
a['apple']
'사과'

즉, 딕셔너리는 위치가 아니라 Key를 이용해서 Value를 찾는 자료형이다.


1-X-1. 파이썬 3.7 이후 딕셔너리의 순서

파이썬 3.7부터는 딕셔너리에 데이터를 추가한 순서가 유지된다.

a = {'name': 'pingu', 'age': 20, 'job': 'developer'}
  • 위와 같은 순서로 값을 추가했다면 딕셔너리를 순회할 때도 기본적으로 추가한 순서가 유지된다.
  • 파이썬 3.7 이전에는 딕셔너리의 입력 순서가 보장되지 않았다.



2. 딕셔너리는 어떻게 만들까?

딕셔너리는 중괄호 {}를 사용해서 만든다.

딕셔너리명 = {Key1: Value1, Key2: Value2, Key3: Value3, ...}
  • 각각의 요소는 다음과 같이 구성된다.
Key : Value
  • 여러 개의 Key와 Value를 저장할 때는 쉼표 ,로 구분한다.

다음은 사람의 정보를 저장한 딕셔너리이다.

>>> dic = {'name': 'pingu', 'phone': '010-1234-5678', 'birth': '1225'}
KeyValue
namepingu
phone010-1234-5678
birth1225

  • Key와 Value에는 문자열만 사용할 수 있는 것은 아니다.
  • 다음처럼 숫자를 Key로 사용할 수도 있다.
>>> a = {1: 'hi'}
  • 위 딕셔너리에서
Key   = 1
Value = 'hi'

가 된다.


  • Value에는 리스트를 넣을 수도 있다.
>>> a = {'a': [1, 2, 3]}
  • 위 딕셔너리는 다음과 같이 구성된다.
Key   = 'a'
Value = [1, 2, 3]

딕셔너리의 Value에는 문자열, 숫자, 리스트, 튜플 등 다양한 자료형을 저장할 수 있다.




3. 딕셔너리 쌍 추가, 삭제하기

딕셔너리는 만들어진 이후에도 새로운 Key: Value 쌍을 추가하거나 기존 요소를 삭제할 수 있다.

3-1. 딕셔너리 쌍 추가하기

먼저 다음 딕셔너리를 만들어 보자.

>>> a = {1: 'a'}
  • 새로운 Key와 Value를 추가하려면 다음과 같이 작성한다.
딕셔너리명[Key] = Value

>>> a[2] = 'b'
>>> a
{1: 'a', 2: 'b'}
  • a[2] = 'b'를 실행하면
Key   = 2
Value = 'b'

인 새로운 요소가 추가된다.


  • 문자열을 Key로 사용할 수도 있다.
>>> a['name'] = 'pingu'
>>> a
{1: 'a', 2: 'b', 'name': 'pingu'}

  • Value에 리스트를 넣는 것도 가능하다.
>>> a[3] = [1, 2, 3]
>>> a
{1: 'a', 2: 'b', 'name': 'pingu', 3: [1, 2, 3]}

딕셔너리에 요소를 추가할 때는 딕셔너리[Key] = Value 형태를 사용한다.


3-2. 딕셔너리 요소 삭제하기

딕셔너리의 특정 요소를 삭제하려면 del을 사용할 수 있다.

>>> a = {1: 'a', 2: 'b', 'name': 'pingu'}
>>> del a[1]
>>> a
{2: 'b', 'name': 'pingu'}
  • 다음 형태로 사용한다.
del 딕셔너리명[Key]
  • del a[1]은 딕셔너리에서 Key가 1인 Key와 Value 쌍 전체를 삭제한다.
1 : 'a'

가 함께 삭제되는 것이다.




4. 딕셔너리에서 Key를 사용해 Value 얻기

딕셔너리에서 가장 중요한 것은 Key를 이용해서 Value를 찾는 것이다.

>>> grade = {'pingu': 90, 'minsu': 80}
  • 'pingu'라는 Key의 값을 확인하려면 다음과 같이 작성한다.
>>> grade['pingu']
90

  • 'minsu'의 값을 확인해 보자.
>>> grade['minsu']
80

딕셔너리에서 값을 가져오는 기본 형태는 다음과 같다.

딕셔너리명[Key]

4-1. 리스트의 인덱싱과 헷갈리지 말자

다음 두 자료형을 비교해 보자.

a = ['a', 'b', 'c']
a[1]
'b'
  • 리스트에서 a[1]은 인덱스 번호가 1인 두 번째 요소를 의미한다.

  • 하지만 딕셔너리는 다르다.
a = {1: 'a', 2: 'b'}
>>> a[1]
'a'
  • 딕셔너리에서 a[1]의 1은 인덱스 번호가 아니다.
  • Key가 1인 Value를 가져오라는 뜻이다.
Key 1 → Value 'a'

! 리스트와 딕셔너리의 a[1] 차이

  • 리스트 a[1] → 두 번째 요소
  • 딕셔너리 a[1] → Key가 1인 Value

  • Key가 문자열이어도 동일하다.
>>> a = {'name': 'pingu', 'age': 20}
>>> a['name']
'pingu'

>>> a['age']
20

딕셔너리는 리스트처럼 위치를 이용한 인덱싱을 하는 것이 아니라 Key를 직접 지정해서 Value를 가져온다.




5. 딕셔너리를 만들 때 주의할 사항

딕셔너리를 사용할 때 반드시 알아 두어야 할 몇 가지 특징이 있다.

5-1. Key는 중복될 수 없다

딕셔너리의 Key는 각각 고유해야 한다.

>>> a = {1: 'a', 1: 'b'}
>>> a
{1: 'b'}
  • 같은 Key 1을 두 번 사용했지만 최종적으로 하나만 남았다.
  • 마지막에 저장된 값 'b'가 남게 된다.

그 이유는 딕셔너리가 Key를 이용해서 Value를 찾기 때문이다.

1 → 'a'
1 → 'b'
  • 하나의 Key 1에 서로 다른 Value가 존재하면 어떤 값을 가져와야 하는지 구분할 수 없다.

따라서 딕셔너리의 Key는 중복해서 사용할 수 없다.


5-2. 리스트는 Key로 사용할 수 없다

딕셔너리의 Key에는 아무 자료형이나 사용할 수 있는 것은 아니다.

  • 다음과 같이 리스트를 Key로 사용해 보자.
>>> a = {[1, 2]: 'hi'}
  • 오류가 발생한다.
TypeError: unhashable type: 'list'

  • 리스트는 내부의 값을 변경할 수 있는 mutable(변경 가능한) 자료형이다.
a = [1, 2, 3]
a[0] = 10
  • 이처럼 값이 바뀔 수 있기 때문에 딕셔너리의 Key로 사용할 수 없다.

  • 반면 튜플은 값을 변경할 수 없는 immutable(변경 불가능한) 자료형이므로 Key로 사용할 수 있다.
>>> a = {(1, 2): 'hi'}

간단하게 기억하면 다음과 같다.

리스트 → Key 사용 X
튜플   → Key 사용 O

  • 반면 Value에는 변경 가능 여부와 관계없이 다양한 값을 사용할 수 있다.
a = {
    'number': 10,
    'name': 'pingu',
    'list': [1, 2, 3],
    'tuple': (4, 5)
}



6. 딕셔너리 관련 함수

딕셔너리도 리스트처럼 변수 이름 뒤에 .을 붙여 여러 가지 기능을 사용할 수 있다.

딕셔너리명.함수()
  • 자주 사용하는 딕셔너리 관련 함수를 알아보자.

6-1. Key 목록 얻기 - keys

keys()는 딕셔너리에 존재하는 Key들을 가져오는 함수이다.

>>> a = {'name': 'pingu', 'phone': '010-1234-5678', 'birth': '1225'}
>>> a.keys()
dict_keys(['name', 'phone', 'birth'])
  • 결과가 리스트처럼 보이지만 실제로는 dict_keys 객체이다.

  • 리스트 형태가 필요하다면 list()를 사용해서 변환할 수 있다.
>>> list(a.keys())
['name', 'phone', 'birth']

  • dict_keys는 반복문에서 그대로 사용할 수도 있다.
>>> for k in a.keys():
...     print(k)
...
name
phone
birth

아직 for문을 배우지 않았다면 지금은 keys()가 Key들을 가져오는 함수라는 정도로 이해하고 넘어가자.


6-2. Value 목록 얻기 - values

values()는 딕셔너리의 Value들만 가져온다.

>>> a = {'name': 'pingu', 'phone': '010-1234-5678', 'birth': '1225'}
>>> a.values()
dict_values(['pingu', '010-1234-5678', '1225'])
  • keys()가 Key를 가져왔다면 values()는 Value를 가져온다.
keys()   → Key
values() → Value

6-3. Key와 Value 쌍 얻기 - items

items()는 딕셔너리의 Key와 Value를 한 쌍씩 가져온다.

>>> a = {'name': 'pingu', 'phone': '010-1234-5678', 'birth': '1225'}
>>> a.items()
dict_items([('name', 'pingu'), ('phone', '010-1234-5678'), ('birth', '1225')])
  • 각각의 Key와 Value가 튜플 형태로 묶여 있다.
('name', 'pingu')
('phone', '010-1234-5678')
('birth', '1225')

정리하면 다음과 같다.

함수가져오는 값
keys()Key
values()Value
items()Key와 Value 쌍

6-4. Key와 Value 쌍 모두 지우기 - clear

clear()는 딕셔너리 안에 있는 모든 요소를 삭제한다.

>>> a = {'name': 'pingu', 'age': 20}
>>> a.clear()
>>> a
{}
  • 모든 요소가 삭제되어 빈 딕셔너리 {}가 된다.

빈 자료형의 표현을 비교하면 다음과 같다.

[]    # 빈 리스트
()    # 빈 튜플
{}    # 빈 딕셔너리

6-5. Key로 Value 얻기 - get

get()도 Key를 이용해서 Value를 가져오는 함수이다.

>>> a = {'name': 'pingu', 'phone': '010-1234-5678'}
>>> a.get('name')
'pingu'
  • 다음 두 표현은 정상적인 Key가 존재한다면 같은 결과를 얻는다.
a['name']
a.get('name')

6-5-1. a[Key]와 get()의 차이

두 방법의 가장 큰 차이는 존재하지 않는 Key를 찾았을 때 나타난다.

>>> a = {'name': 'pingu'}
  • 존재하지 않는 Key를 [] 방식으로 찾으면 오류가 발생한다.
>>> a['age']
KeyError: 'age'

  • 반면 get()을 사용하면 오류가 발생하지 않고 None을 반환한다.
>>> a.get('age')
None

None은 파이썬에서 값이 없다는 것을 나타내는 특별한 객체이다.


따라서 다음과 같이 기억할 수 있다.

a[Key]
→ Key가 없으면 오류 발생

a.get(Key)
→ Key가 없으면 None 반환

6-5-2. Key가 없을 때 기본값 지정하기

get()은 찾는 Key가 없을 경우 대신 반환할 값을 지정할 수도 있다.

>>> a = {'name': 'pingu'}
>>> a.get('age', '정보없음')
'정보없음'
  • 'age'라는 Key가 없기 때문에 미리 지정한 '정보없음'을 반환한다.
딕셔너리.get(Key, 기본값)

Key가 존재하지 않을 가능성이 있을 때 get()을 사용하면 편리하다.


6-6. 해당 Key가 딕셔너리 안에 있는지 조사하기 - in

in을 사용하면 특정 Key가 딕셔너리에 존재하는지 확인할 수 있다.

>>> a = {'name': 'pingu', 'phone': '010-1234-5678'}

>>> 'name' in a
True
  • 'name'이라는 Key가 존재하므로 True를 반환한다.

>>> 'email' in a
False
  • 'email'이라는 Key는 존재하지 않으므로 False를 반환한다.

기본 형태는 다음과 같다.

Key in 딕셔너리
Key 존재 → True
Key 없음 → False

여기서 중요한 점은 in이 Value가 아닌 Key를 확인한다는 것이다.

>>> a = {'name': 'pingu'}
>>> 'name' in a
True
>>> 'pingu' in a
False
  • 'pingu'는 Value이므로 위 표현에서는 False가 된다.

6-7. Key로 Value 꺼내기 - pop

pop()은 지정한 Key의 Value를 반환하면서 해당 Key와 Value 쌍을 딕셔너리에서 삭제한다.

>>> a = {'name': 'pingu', 'phone': '010-1234-5678', 'birth': '1225'}
>>> phone = a.pop('phone')
  • 반환된 값을 확인해 보자.
>>> phone
'010-1234-5678'
  • 다시 딕셔너리 a를 확인하면 phone 항목이 삭제되어 있다.
>>> a
{'name': 'pingu', 'birth': '1225'}

즉, pop()은 값을 꺼내는 동시에 해당 요소를 삭제한다.


6-7-1. get과 pop의 차이

get()과 pop() 모두 Key를 이용해서 Value를 가져올 수 있지만 중요한 차이가 있다.

get() → Value를 가져오기만 함
pop() → Value를 가져오고 해당 요소까지 삭제

함수Value 반환요소 삭제
get()OX
pop()OO

  • pop()도 존재하지 않는 Key를 찾을 때 기본값을 지정할 수 있다.
>>> a = {'name': 'pingu'}
>>> email = a.pop('email', '정보없음')
>>> email
'정보없음'
  • 'email'이라는 Key가 없으므로 기본값 '정보없음'을 반환한다.



7. 딕셔너리 관련 함수 한눈에 보기

지금까지 배운 딕셔너리 관련 기능을 정리하면 다음과 같다.

사용법설명
a[key]Key에 해당하는 Value 가져오기
a[key] = value새로운 Key와 Value 추가 또는 기존 값 변경
del a[key]Key와 Value 쌍 삭제
a.keys()모든 Key 가져오기
a.values()모든 Value 가져오기
a.items()모든 Key와 Value 쌍 가져오기
a.clear()모든 요소 삭제
a.get(key)Key로 Value 가져오기
a.get(key, 기본값)Key가 없으면 기본값 반환
key in aKey 존재 여부 확인
a.pop(key)Value를 반환하고 해당 요소 삭제



8. 딕셔너리에서 기억해야 할 핵심

딕셔너리에서 가장 중요한 내용을 정리하면 다음과 같다.

  • 딕셔너리는 {}를 사용한다.
a = {'name': 'pingu', 'age': 20}
  • 딕셔너리는 Key: Value 형태로 값을 저장한다.
'name' : 'pingu'
'age'  : 20
  • Key를 이용해서 Value를 가져온다.
a['name']
  • 새로운 요소를 추가할 수 있다.
a['job'] = 'developer'
  • 요소를 삭제할 수 있다.
del a['age']
  • Key는 중복될 수 없다.
a = {1: 'a', 1: 'b'}
  • 변경 가능한 리스트는 Key로 사용할 수 없다.
{[1, 2]: 'hi'}    # 오류
  • 변경할 수 없는 튜플은 Key로 사용할 수 있다.
{(1, 2): 'hi'}
  • keys()는 Key를 가져온다.
a.keys()
  • values()는 Value를 가져온다.
a.values()
  • items()는 Key와 Value를 함께 가져온다.
a.items()
  • get()을 사용하면 존재하지 않는 Key를 비교적 안전하게 처리할 수 있다.
a.get('email', '정보없음')
  • in을 사용하면 Key가 존재하는지 확인할 수 있다.
'name' in a
  • pop()은 Value를 반환하면서 해당 Key와 Value를 삭제한다.
a.pop('name')

! 딕셔너리의 핵심

리스트는 위치(index)를 이용해서 값을 찾지만,
딕셔너리는 Key를 이용해서 Value를 찾는다.

리스트     → 위치(index) : 값
딕셔너리   → Key : Value

처음 딕셔너리를 공부할 때는 우선 Key → Value 구조를 확실하게 이해하는 것이 가장 중요하다.

profile
성실하자:)

0개의 댓글