on
딕셔너리 타입
딕셔너리 타입
■딕셔너리(dictionary)
딕셔너리는 단어 그대로의 '사전'과 같이 별도로 정의한 키(key)를 통해 각 요소에 접근할 수 있도록 만들어진 데이터 타입이다.
사전에서 단어를 가지고 그 단어의 설명을 찾을 수 있듯이, 딕셔너리에서는 키(key)를 가지고 그 키에 해당하는 값(value)을 찾을 수 있다.
※ 대부분의 프로그래밍 언어에서 파이썬의 딕셔너리와 같이 키(key)와 값(value)로 구성된 데이터 타입을 맵(map)이라고 부른다. ex) JAVA : Map 컬렉션 클래스, C++ : Map 컨테이너
■딕셔너리 선언하기
딕셔너리는 중괄호({})로 감싸서 선언하며, 딕셔너리의 각 요소(element)들은 쉼표(,)를 사용하여 구분한다.
이 요소는 또다시 키(key)와 값(value)의 한 쌍으로 구성되며, 이 둘은 콜론(:)으로 연결된다.
딕셔너리명 = {요소1, 요소2, 요소3, ...} 요소 = 키(key): 값(value)
dict1 = {'하나': 1, '둘': 'two', '파이': 3.14} dict2 = dict({'하나': 1, '둘': 'two', '파이': 3.14}) dict3 = dict([('하나', 1), ('둘', 'two'), ('파이', 3.14)]) dict4 = dict(하나=1, 둘='two', 파이=3.14) print(dict1) # {'하나': 1, '둘': 'two', '파이': 3.14} print(dict2) # {'하나': 1, '둘': 'two', '파이': 3.14} print(dict3) # {'하나': 1, '둘': 'two', '파이': 3.14} print(dict4) # {'하나': 1, '둘': 'two', '파이': 3.14}
위처럼 파이썬 내장 함수 dict()를 사용해도 딕셔너리를 선언할 수 있다. 단, dict4처럼 dict()의 인수에 대입 연산자('=')를 바로 사용하기 위해서는 키(key)가 문자열이어야만 한다.
딕셔너리의 키(key)는 정수뿐만 아니라 문자열이나 실수 등도 사용할 수 있지만, 리스트나 딕셔너리와 같이 변경할 수 있는 타입(mutable types)의 값은 사용할 수 없다.
dict1 = {'하나': 1, 2: 'two', 3.14: 'pi'} dict2 = {('ten', 10): ['열', 10.0]} print(dict1) # {'하나': 1, 2: 'two', 3.14: 'pi'} print(dict2) # {('ten', 10): ['열', 10.0]}
dict2처럼 튜플은 그 값을 변경할 수 없는 타입(immutable types)이므로, 딕셔너리의 키(key)로 사용될 수 있다.
■딕셔너리 사용하기
딕셔너리는 대괄호([])를 사용하여 키(key)를 전달함으로써 해당 키로 저장된 값을 얻을 수 있다. 또한, 딕셔너리의 내장 함수인 get()을 사용해도 같은 결과를 얻을 수 있다.
이 두 방식의 차이점은 존재하지 않는 키(key)에 대한 대괄호를 사용하는 방식은 KeyError를 발생시켜 프로그램을 강제 종료시키지만, get()은 정상적으로 종료되며 None을 반환하는 것 뿐이다.
dict1 = dict({'자바': 80, 'PHP': 90, 'HTML': 70}) print(dict1['자바']) # 80 print(dict1.get('자바')) # 80 # print(dict1['파이썬']) print(dict1.get('파이썬')) # None
■딕셔너리에 요소 추가·제거
dict1 = dict({'자바': 80, 'PHP': 90, 'HTML': 70}) dict1['파이썬'] = 100 # 요소 추가 print(dict1) # {'자바': 80, 'PHP': 90, 'HTML': 70, '파이썬': 100} del dict1['PHP'] # 요소 제거 print(dict1) # {'자바': 80, 'HTML': 70, '파이썬': 100} dict1['자바'] = 100 # 요소 변경 print(dict1) # {'자바': 100, 'HTML': 70, '파이썬': 100} dict1.clear() # 요소 한번에 제거 print(dict1) # {}
■딕셔너리의 정보 얻기
keys() : 딕셔너리에 저장된 모든 요소의 키(key)를 한 번에 얻을 수 있다.
values() : 딕셔너리에 저장된 모든 요소들의 값(value)를 따로 얻을 수 있다.
items() : 딕셔너리에 저장된 모든 요소들을 각각 키와 값의 한 쌍으로 이루어진 튜플의 형태로 반환한다.
keys()와 values(), items()의 반환값은 각각 dict_keys와 dict_values, dict_items 객체로서, 이 객체들은 list()를 사용하여 리스트 타입으로 변환하여 사용할 수 있다. 하지만 굳이 리스트로 변환하지 않더라도 반복문 등에 그대로 사용할 수 있다.
dict1 = dict({'자바': 80, 'PHP': 90, 'HTML': 70}) print(dict1.keys()) # dict_keys(['자바', 'PHP', 'HTML']) print(dict1.values()) # dict_values([80, 90, 70]) print(dict1.items()) # dict_items([('자바', 80), ('PHP', 90), ('HTML', 70)]) print('HTML' in dict1) # True print('파이썬' in dict1) # False
※ 파이썬 2.X 버전까지는 keys()와 values(), items()의 반환값이 모두 리스트 타입이었다. 하지만 리스트 타입으로 이들 함수의 결과를 반환하기 위해서는 메모리의 낭비가 많이 발생하였기에, 이를 줄이고자 파이썬 3.0버전부터는 각각 dict_keys와 dict_values, dict_items 객체로 결과값을 반환하도록 변경되었다.
from http://woong971.tistory.com/56 by ccl(A) rewrite - 2021-11-01 14:00:25