딕셔너리
도라에몽
진구 曰:“도라에몽, 날도 추운데 모히또 가서 몰디브나 한 잔 할까?”
도라에몽 曰: “좋아~”
도라에몽은 자신의 도구 주머니에서 ‘어디로든지 문’을 찾기 시작한다. 도라에몽의 도구 주머니는 리스트 타입으로 되어 있다.
gadget_list = [
'공기총',
'대나무 헬리콥터',
'울트라링',
'우정 캡슐',
'월광등',
'이어주는 실',
'패션 카메라',
'화해하는 종',
'호랑이 꼬리 세트',
'로빈슨 크루소 세트',
'어디로든지 문'
'로켓 빨대',
'빅 라이트'
]
도라에몽은 0번째 인덱스부터 ‘어디로든지 문’ 을 찾아나간다.
gadget_list[0] # 공기총
0번째 인덱스에는 공기총이 들어있었다. 도라에몽은 탐색을 계속한다.
gadget_list[1] # 대나무 헬리콥터
1번째 인덱스의 도구도 어디로든지 문은 아니었다.
이런 식으로 찾아 나가면 도구를 찾기 까지 한 참이 걸릴 것이다. 필요한 도구가 생각날 때 마다 도구 주머니를 일일이 찾아나가야만 하는 걸까? 좋은 방법을 생각해보자.
“list.index(‘어디로든지 문’) 함수를 사용하면 되는거 아닌가요?”
물론 list.index()를 사용하면 함수 호출 한 번으로 원하는 요소가 몇 번째 인덱스에 있는지 찾을 수 있다. 그러나 list.index() 함수 안에서 내부적으로 일일이 리스트 안의 요소를 찾아 나간다는 것은 변함이 없다. 일일이 탐색하지 않고 요소를 찾을 수 있는 방법이 있는데, 바로 딕셔너리에 저장하는 것이다.
딕셔너리 소개
딕셔너리는 다음과 같은 특징을 갖고 있다.
- {} (중괄호) 를 사용해서 선언한다.
- 한 요소당 key 값, value 값 두 가지 값을 쌍으로 갖고 있다.
- 리스트에 비해 탐색 연산이 빠르다.
- 숫자 인덱스 대신 key 값을 사용해 value 에 접근한다.
- 파이썬의 딕셔너리는 순서가 ‘있는’ 자료형이다.(cpython 버전 3.6 이후 부터, 버전 3.7 이후 부터는 모든 파이선 dict 는 ‘삽입한 순서’를 유지한다. https://mail.python.org/pipermail/python-dev/2017-December/151283.html )
간단하게 딕셔너리를 정의해 보자.
gadget_dict = {
'key 값' : 'value 값'
}
value 값을 가져오고 싶을 떈 아래와 같이 한다.
print(gadget_dict['key 값']) # 출력 : value 값
자 이제 아직도 리스트로 된 도구 주머니를 뒤지고 있는 도라에몽에게 돌아가 보자. 도라에몽의 도구를 dict 로 구현하면 아래와 같이 표현할 수 있다.
# 변수들은 모두 사전에 초기화 되었다고 가정합니다.
gadget_dict = {
'공기총': AIR_GUN,
'대나무 헬리콥터': BAMBOO_HELI,
'울트라링': ULTRA_RING ,
'우정 캡슐': FRIENDS_CAPSULE,
'월광등': MOONLIGHT,
'이어주는 실': STRING ,
'패션 카메라': PASSION_CAM ,
'화해하는 종': MAKE_UP_BELL,
'호랑이 꼬리 세트': TIGER_TAIL_SET,
'로빈슨 크루소 세트': ROBINSON_SET,
'어디로든지 문': WHEREVER_DOOR,
'로켓 빨대': ROCKER_STRAW,
'빅 라이트': BIG_LIGHT
}
이제 바로 도구를 찾을 수 있겠다.
print(gadget_dict['어디로든지 문']) # 바로 찾았다.
딕셔너리의 기능
또 다른 날, 진구가 도라에몽의 도구 주머니에 대해 질문하기 시작한다. “주머니에는 도구가 몇 개나 들어 있어?” “주머니에 들어있는 도구는 무엇 무엇이 있어?” “새로운 도구를 주머니에 넣으려면 어떻게 해?” “지금 주머니에 대나무 헬리콥터 있어?” 진구의 궁금증을 풀어줄 수 있는 dict 여러가지 기능을 소개한다.
dictionary 안의 요소 수를 알고 싶으면 len() 을 사용하면 된다.
print(len(gadget_dict))
dictionary 안의 모든 요소를 조회하고 싶다면 다음 방법들이 있다.
dict.keys() # 모든 key 값들을 반환합니다.
dict.values() # 모든 value 값들을 반환합니다.
dict.items() # 모든 key, value 쌍을 반환합니다.
gadget_dict['새로운 도구'] = '새로운 도구'
print(gadget_dict.values()) # dict_values(['공기총', '대나무 헬리콥터', '울트라링', '우정 캡슐', '월광등', '이어주는 실', '패션 카메라', '화해하는 종', '호랑이 꼬리 세트', '로빈슨 크루소 세트', '어디로든지 문', '로켓 빨대', '빅 라이트', '새로운 도구'])
dictionary 안에 특정 key 값이 있는지 조회하려면
print('대나무 헬리콥터' in gadget_dict) # True
gadget_dict.pop('대나무 헬리콥터')
print('대나무 헬리콥터' in gadget_dict) # False
참고
dict 에서 마지막 , 는 무시된다. (다음 요소가 없을 경우)
Comments