민수야, 너도 할 수 있어
Python 공부 (6) - 자료형(딕셔너리) 본문
자료형 - 딕셔너리(Dictionary)
자료구조 중, "school" : "HUFS" 와 같이 대응관계를 나타내는 것을 연관배열(associative array) 이라고 한다. 연관 배열은 Key(키) 하나와 Value(값) 하나가 묶여있으며, 키를 통하여 묶여있는 값을 얻을 수 있는 자료구조이다. Python 에서 이에 해당하는 자료형은 딕셔너리(Dictionary) 이다.
딕셔너리는 리스트나 튜플처럼 순차적(sequential)으로 요소값에 접근하지 않고 오로지 키를 통해 값을 구한다. 이런 특징을 이용하여 특정한 값을 찾을 때, 모든 값에 접근할 필요없이 키만 확인하면 된다. 참고로, Python에는 순차적으로 접근할 수 있는 자료형(sequential data type) 과 비순차적으로 순서와 상관 없이 접근할 수 있는 자료형(out of order data type)이 있다. 이도 나중에 다루어볼 예정이다.
딕셔너리 만드는 법
{Key1:Value1, Key2:Value2, ...}
위와 같이 {}(중괄호) 안에 키와 그에 대응하는 값의 묶음들을 넣으면 된다. 딕셔너리 자료형에서 하나의 요소는 키와 값의 묶음으로 이루어져 있다.
- 딕셔너리 예시
dic = {1:'hello', 'birth':'1118', 'name':'Ted'}
딕셔너리의 요소(키와 값의 쌍) 추가 및 삭제
- 요소 추가하기
a = {1:'hello'}
a[2] = 'world'
print(a) #{1:'hello', 2:'world'}
a['name'] = 'Ted'
print(a) #{'name':'Ted', 1:'hello', 2:'world'}
안에 새로운 키를 넣고 그에 대응하는 값을 대입해주면 된다. 그리고, 위와 같이 딕셔너리는 요소들을 순차적으로 접근하지 않기 때문에 순서와 상관 없이 요소들이 추가됨을 볼 수 있다.
- 요소 삭제하기
a = {1:'hello', 2:'world'}
del a[1] #key가 1인 key:value 쌍 삭제
print(a) #{2:'world'}
위 처럼 요소를 삭제할 때, del 딕셔너리이름[key] 처럼 사용하면 key:value 쌍이 삭제된다.
딕셔너리에서 주의사항
- 중복되는 key를 사용해선 안된다
d = {'name':'Ted', 'name':'Chan'}
print(d) #{'name':'Ted'}
위와 같이 중복된 키가 있으면 하나의 요소만을 제외한 모든 중복되는 요소들이 무시된다. 이 때, 어떤 요소들이 무시될지는 예측할 수 없다.
- key 에는 immutable(불변)한 자료형만 올 수 있다.
여기서! 우리가 이때까지 배운 자료형 중, 요소의 변경 및 삭제가 불가능한 자료형은 숫자형, 튜플, 문자열이다. key에는 변하지 않는 값(immutable data)을 쓰고 value에는 모든 값이 올 수 있다.
딕셔너리 관련 함수들
아래의 모든 예제들에 d = {1:'hello', 2:'world'}
가 선언되어있음을 가정하고 보아야 한다.
- key 리스트 만들기 (keys)
print(d.keys()) #dict_keys([1,2])
a = list(d.keys())
print(a) #[1,2]
위처럼, keys 함수는 딕셔너리의 key만 따로 묶어 반환해준다. 하지만, 리스트가 아닌 dict_keys 라는 객체로 반환 하며 리스트로 만들고 싶을 때는 위 예제의 세 번째 줄 처럼 리스트로 변환해주면 된다. 이는 keys 함수 뿐만아니라 아래에 나올 values 와 items 함수들도 마찬가지인다.
- value 리스트 만들기 (values)
print(d.values()) #dict_values(['hello','world'])
values 함수는 딕셔너리의 value만 따로 묶어 dict_values 객체를 반환한다.
- key, value 쌍 리스트 만들기 (items)
print(d.items()) #dict_items([(1,'hello'),(2,'world')])
items 함수는 딕셔너리의 key, value 쌍을 각각 튜플로 묶은 dict_items 객체를 반환한다.
- 요소 모두 지우기 (clear)
d.clear()
print(d) #{}
clear 함수는 딕셔너리 내의 모든 요소를 삭제한다. 빈 딕셔너리를 위 예제처럼 {}
로 표시한다.
- key 로 value 얻기 (get)
a = d.get(1)
print(a) #'hello'
b = d.get(3)
print(b) #KeyError 이 발생한다.
get(x) 함수는 딕셔너리 내의 x키에 대응하는 값을 반환한다. 이는 딕셔너리 이름[key]가 반환하는 값과 동일하다. 하지만, get 함수 안에 딕셔너리 내에 존재하지 않는 key를 인자로 전달한다면, None(거짓) 값을 반환하는 반면에 딕셔너리 이름[] 의 대괄호 안에 존재하지 않는 키를 넣으면 KeyError : 'nokey'
가 발생한다.
a = d.get(3,'Python')
print(a) #'Python'
또한, 위와 같이 get 함수의 두 번째 인자에 디폴트 값을 전달함으로써 딕셔너리 내에 첫 번째 인자에 전달한 key 가 없으면 디폴트 값을 반환한다.
- 특정 key가 딕셔너리 내에 있는지 확인 (in)
a = 'name' in d
print(a) #False
in 앞에 딕셔너리 내에 있는지 확인하고 싶은 key를 위치하고 in 뒤에 딕셔너리를 두면 key의 유무를 확인하고 있으면 True(참), 없으면 False(거짓)을 반환한다.
이번에는 python의 자료형 중, 딕셔너리 자료형을 공부했다. 다음에는 집합 자료형 공부를 포스팅 할것이다. 참고로, 저자는 공부자료로 박응용 저자의 점프 투 파이썬 책을 이용하고 있다. 이는 구글에서도 무료로 볼 수 있으니 공부에 참고하길 바란다.
'언어 > python' 카테고리의 다른 글
Python 공부 (8) - mutable(가변) 과 sequential(순차적) (0) | 2020.02.12 |
---|---|
Python 공부 (7) - 자료형(집합) (0) | 2020.02.01 |
Python 공부 (5) - 자료형(튜플) (0) | 2020.01.30 |
Python 공부 (4) - 자료형(리스트) (0) | 2020.01.30 |
Python 공부 (3) - 자료형(문자열) (0) | 2020.01.19 |