상세 컨텐츠

본문 제목

[ Python 기초 문법 ] - 자료형(5) - 딕셔너리 자료형

Language/Python

by bing_su 2021. 2. 27. 22:35

본문

반응형
SMALL

컴퓨터에서는 키를 값에 매핑할 수 있는 구조인, 연관 배열(associative array) 구조인 해시 테이블(hash table)이 있다. 파이썬에서는 이러한 자료형을 딕셔너리라고 한다. 딕셔너리는 Key와 Value를 한 쌍으로 가지는 자료형이다.

[ 딕셔너리의 생성 ]

딕셔너리의 기본 모습은 아래와 같다.

{Key1:Value1, Key2:Value2, Key3:Value3, ...}

Key와 Value의 쌍 여러 개가 { }로 둘러싸여 있다. 각각의 요소는 Key:Value 형태로 이루어져 있고, 쉼표(,)로 구분되어 있다. Key에는 변하지 않는 값을 사용하고, Value에는 변하는 값과 변하지 않는 값 모두 사용할 수 있다.

 

몇 가지 딕셔너리 예시를 살펴보자.

>>> dic = {1: 'hi'}  # Key로 정수 값 1, Value로 문자열 'hi' 사용
>>> a = {'a': [1, 2, 3]}  # Value에 리스트를 넣을 수 있다.

[ 딕셔너리 쌍 추가, 삭제 ]

< 딕셔너리 쌍 추가 >

>>> a = {1: 'a'}
>>> a[2] = 'b'  # {2:'b'} 쌍 추가
>>> a
{1: 'a', 2: 'b'}
>>> a['name'] = 'pey'  # {'name':'pey'} 쌍 추가
>>> a
{1: 'a', 2: 'b', 'name': 'pey'}
>>> a[3] = [1, 2, 3]  # {3:[1, 2, 3]} 쌍 추가
>>> a
{1: 'a', 2: 'b', 'name': 'pey', 3: [1, 2, 3]}

< 딕셔너리 요소 삭제 >

>>> del a[1]  # Key가 1인 Key:Value 쌍 삭제
>>> a
{2: 'b', 3: [1, 2, 3], 'name': 'pey'}

del a[Key]와 같이 입력하면 저장한 Key에 해당하는 {Key:Value} 쌍이 삭제된다.

[ 딕셔너리 사용법 ]

딕셔너리를 만드는 방법 외에 딕셔너리를 제대로 활용하기 위해 알아야 할 것들을 살펴보려고 한다.

< 딕셔너리에서 Key 사용해서 Value 얻기 >

>>> grade = {'pey': 10, 'julliet': 99}
>>> grade['pey']  # Key가 'pey'인 딕셔너리의 Value 반환
10
>>> grade['julliet']
99

리스트나 튜플, 문자열이 요솟값을 얻을 때 슬라이싱을 사용했다면, 딕셔너리는 Key를 사용해서 Value를 구할 수 있다. 어떠한 Key의 Value를 얻기 위해서는 '딕셔너리 변수 이름[Key]'를 사용한다.

>>> a = {1: 'a', 2: 'b'}
>>> a[1]  # Key가 1인 요소의 Value 반환
'a'
>>> a[2]  # Key가 2인 요소의 Value 반환
'b'

딕셔너리 변수에서 [ ] 안의 숫자는 인덱스를 뜻하는 것이 아니라 Key에 해당하는 1을 나타낸다. 딕셔너리는 리스트나 튜플에 있는 인덱싱 방법을 적용할 수 없다.

< 딕셔너리 만들 때 주의 사항 >

딕셔너리에서 Key는 고유한 값이다. 중복되는 Key를 설정하면 하나를 제외한 나머지 것들이 모두 무시된다.

>>> a = {1: 'a', 1: 'b'}  # Key 값으로 1 중복 사용
>>> a
{1: 'b'}  # 1:'a' 쌍이 무시된다.

리스트는 변할 수 있는 값이기 때문에 Key로 쓸 수 없다. 그에 반해 튜플은 사용할 수 있다.

리스트를 Key로 설정할 경우, 위와 같이 리스트를 키 값으로 사용할 수 없다는 형 오류가 발생한다.

[ 딕셔너리 관련 함수 ]

< Key 리스트 만들기 (keys) >

>>> a = {'name': 'pey', 'phone': '0109993323', 'birth': '1119'}
>>> a.keys()  # 딕셔너리 a의 Key만을 모아서 dict_keys 객체 반환
dict_keys(['name', 'phone', 'birth'])
참고 ) Python 2.7 버전까지는 a.keys() 함수를 호출하면 dict_keys가 아닌 리스트를 반환했다. 리스트를 돌려주기 위해서 발생하는 메모리 낭비를 방지하기 위해 Python 3.0 이후 버전에서는 dict_keys 객체를 반환한다. dict_values, dict_items 역시 Python 3.0 이후 버전에서 추가된 것들이다. 만약 3.0 이후 버전에서 반환 값으로 리스트가 필요한 경우 'list(a.keys())를 사용하면 된다. dict_keys, dict_values, dict_items 등은 리스트로 변환하지 않아도 기본적인 반복 구문(Ex: for 문)을 실행할 수 있다.

dict_keys 객체는 아래와 같이 사용할 수 있다. 리스트를 사용하는 것과 차이는 없는데, 리스트 고유의 append, insert, pop, remove, sort 함수는 수행할 수 없다.

>>> for k in a.keys():
...     print(k)
...
name
phone
birth

< Value 리스트 만들기 (values) >

Value만 얻고 싶을 경우 values 함수를 사용하면 된다. values 함수를 사용하면 dict_values 객체를 반환한다.

>>> a.values()
dict_values(['pey', '0109993323', '1118'])

< Key, Value 쌍 얻기 (items) >

items 함수는 Key와 Value의 쌍을 튜플로 묶은 값을 dict_items 객체로 돌려준다.

>>> a.items()
dict_items([('name', 'pey'), ('phone', '0109993323'), ('birth', '1119')])

< Key:Value 쌍 모두 지우기 (clear) >

clear 함수는 딕셔너리 안의 모든 요소를 삭제한다. 빈 딕셔너리는 { }로 표현한다.

>>> a.clear()
>>> a
{}
# 참고) 비어 있는 딕셔너리는 a = dict()로 생성할 수 있다.

< Key로 Value 얻기 (get) >

get(x) 함수는 x라는 Key에 대응되는 Value를 돌려준다.

>>> a = {'name':'pey', 'phone':'0119993323', 'birth':'1118'}
>>> a.get('name')
'pey'
>>> a.get('phone')
'0109993323'

a[Key]에서 존재하지 않는 Key를 가져오려 할 경우, Key 오류가 발생했었다. 하지만 a.get[Key]에서 Key가 존재하지 않을 경우에는 None을 돌려준다는 차이가 있다. 어떤 것을 사용해도 상관없다.

>>> a = {'name':'pey', 'phone':'0109993323', 'birth':'1119'}
>>> print(a.get('nokey'))  # 없는 Key 값
None  # None을 반환함

딕셔너리에 해당 Key 값이 없을 때 미리 정해 둔 디폴트 값으로 가져오고 싶으면 get(x, '디폴트 값')을 사용하면 된다.

>>> a.get('foo', 'bar')  # a 딕셔너리에는 'foo'에 해당하는 값이 없다.
'bar'  # default 값인 'bar' 반환

< 해당 Key가 딕셔너리 안에 있는지 조사하기 (in) >

>>> a = {'name':'pey', 'phone':'0109993323', 'birth':'1118'}
>>> 'name' in a
True  # 'name'은 a 딕셔너리의 Key 중 하나라서 참 반환
>>> 'email' in a
False  # 'email'은 a 딕셔너리의 Key가 아니므로 거짓 반환

 

반응형
LIST

관련글 더보기

댓글 영역