본문 바로가기
파이썬/기초 문법

[파이썬]딕셔너리 기본 - 만들기, 키와 값, 키로 값 얻기

by 코키드 Cokid 2022. 10. 2.
반응형

이번 포스팅에서는 딕셔너리(dictionary)를 다룬다. 딕셔너리는 앞서 다뤘던 리스트와 튜플과는 많이 다른 모습이다.

딕셔너리는 키(key)와 값(value)이 한 쌍으로 이루어져 있는 자료형이다.

리스트와 튜플은 순차적으로 요소 값을 찾는 반면, 딕셔너리는 key를 찾아서 value를 찾는다.

 

딕셔너리 만들기 - 딕셔너리란? & Key, Value

딕셔너리는 key와 value의 쌍으로 이루어진 자료형이다. 다음 그림으로 딕셔너리가 어떤 자료형인지 맛만 보고 예시 코드를 살펴보자.

딕셔너리 자료형이 다루는 데이터 형태

딕셔너리 만들기

>>> a = {'Name': 'Mike', 'Age': 29, 'City': 'New York'}

>>> a = {1: 'one', 2:'two', 3:'three'} # 숫자를 key로 딕셔너리 생성

>>> a = {} # 빈 딕셔너리 만들기

>>> a = dict() # 빈 딕셔너리 만들기
>>> type(a)
<class 'dict'>

딕셔너리는 중괄호{}로 둘러싸서 만든다. {key1:value1, key2: value2, key3:value3, ...} 이런 형태로 키(key)와 값(value)이 한쌍을 이뤄 요소 값으로 존재한다.

키는 문자가 될 수도 있고, 숫자가 될 수도 있다. 세 번째와 마지막 코드처럼 빈 딕셔너리를 만들 수 도 있다.

딕셔너리를 생성할 때 유념해야 할 점은 하나의 딕셔너리 안에 중복되는 키가 존재해서는 안 된다는 것이다.

키는 고유한 값을 가져야 한다.

 

>>> a = {'Name': 'Mike', 'Age': 29, 'Age': 30} # 'Age' 키가 중복되어 입력
>>> a
{'Name': 'Mike', 'Age': 30}

위 코드를 보자. 키 'Age'가 중복되어 뒤에 입력됐는데, 딕셔너리를 출력해보면 'Age': 30 만 딕셔너리에 포함되고 먼저 입력한 'Age': 29는 누락되어 하나의 'Age' 키만 남았다.

딕셔너리는 고유한 키를 찾아 값을 반환하기 때문에 같은 키가 여러 개로 중복되어 있으면 안 된다.

한국인이 고유한 주민등록번호로 개인을 식별할 수 있듯이 딕셔너리는 키가 그 역할을 한다.

 

>>> age = {'Mike': 23, 'Bob': 29, 'David': 23} # value는 중복되도 상관 없음

value는 중복되어도 괜찮다. 주민등록번호가 달라도 이름은 같을 수가 있다. value는 이름이다. 주민등록번호가 같을 순 없지만 동명이인은 얼마든지 존재할 수 있는 것이다. 중요한 건 key다.

 

>>> sports = {'Mike': 'Football', 'David': 'Baseball', 'Sarah': ['Tennis', 'Baseball']}

위 예시는 누가 어떤 스포츠르 잘하는 지를 딕셔너리로 표현한 것이다. Mike는 미식축구, David는 야구, Sarah는 테니스와 야구를 잘한다. Sarah가 잘하는 스포츠가 두 개인 것처럼 딕셔너리의 값은 리스트가 될 수 있다.

 

>>> dict_list = {[1, 2]: 'list'} # 리스트는 키가 될 수 없음
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

>>> dict_tuple = {(1, 2): 'tuple'} # 튜플은 키로 사용 가능

value에 리스트를 사용할 수 있지만, 키에는 리스트를 사용할 수 없다. 반면 튜플은 키로 사용할 수가 있다.

그 이유는 리스트는 수정할 수 있는 자료형인 반면에 튜플은 수정할 수 없기 때문이다. key의 값이 중복되면 안 되고 매우 중요한 값이기 때문에, 수정이 가능한 리스트는 사용하지 못하게 한 듯하다.

 

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

딕셔너리 key&value 쌍 추가하기

>> age = {'Mike': 23, 'Bob': 29, 'David': 25}
>>> age['Sarah'] = 32 # 'Sarah'라는 key에 value 32 입력하여 딕셔너리에 추가
>>> age
{'Mike': 23, 'Bob': 29, 'David': 25, 'Sarah': 32}

위 코드와 같이 변수명['새 key'] = value 형태로 딕셔너리의 키와 값 한쌍을 추가할 수 있다.

 

딕셔너리 값 수정하기

>>> age
{'Mike': 23, 'Bob': 29, 'David': 25, 'Sarah': 32}

>>> age[0] = 24 # 첫 번째 요소값 수정 시도
>>> age
{'Mike': 23, 'Bob': 29, 'David': 25, 'Sarah': 32, 0: 24}

Mike의 생일이 지나서 Mike의 나이를 23에서 24로 바꾸려고 한다. 첫 번째 요소인 Mike의 나이를 23에서 24로 수정하려고 age[0] = 24를 입력했더니 key가 0이고 값이 24인 딕셔너리 쌍이 추가되었다. Mike의 나이는 수정이 안 되고 새로운 키와 값이 추가된 것이다.

여기서 헷갈리면 안 된다. 딕셔너리에서 대괄호는 리스트와 튜플의 인덱싱과 다르다. 딕셔너리의 대괄호는 순번을 나타내는 인덱스가 아니라 키를 의미한다.

 

>>> age['Mike'] = 24 # 대괄호 안에 키값을 넣고 수정한다.
>>> age
{'Mike': 24, 'Bob': 29, 'David': 25, 'Sarah': 32}

해당 키의 요소값을 바꾸려면 대괄호 안에 키값을 넣고 값을 수정해줘야 한다.

 

딕셔너리 요소 값 삭제하기

>>> del age['Mike'] # Key 'Mike' 삭제
>>> age
{'Bob': 29, 'David': 25, 'Sarah': 32}

딕셔너리의 요소 값 삭제는 리스트와 동일하게 del 함수를 이용한다.

 

Key를 통해 Value 값 얻기

Key값을 통해 Value 값 얻기

>>> age = {'Mike': 23, 'Bob': 29, 'David': 25}

>>> age['Mike'] # Key 'Mike'를 통해 value값 얻기
23

>>> age['David'] # Key 'David'를 통해 value값 얻기
25

앞의 글에서 다룬 문자열, 리스트, 튜플은 요소값을 얻기 위해 인덱싱과 슬라이싱을 사용했다. 하지만 딕셔너리는 인덱싱과 슬라이싱 개념이 없다. 딕셔너리에서는 오로지 Key를 통해서 Value에 접근할 수 있다.

위 코드를 보자. 변수명[Key] 형태로 age['Mike']을 입력하니 'Mike'에 해당하는 요소값이 출력되었다.

반응형

댓글