key와 value의 쌍을 저장하는 대용량 자료구조로 우리가 사용하는 사전과 동일한 형태를 가지고 있음
e.g., 영어 사전) key: 검색 단어, value: 뜻
{ } 안에 key:value 형태로 , 로 구분하여 나열
내부적으로는 hash 를 사용하여 key를 저장함
순서가 없는 타입이었으나 Python 3.7부터는 삽입 순서 유지

임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수 - wikipedia -
컴퓨터 시스템에서 데이터를 처리하는 기본적인 기능은 크게 Create(생성), Read(읽기/검색), Update(갱신/수정), Delete(삭제)로 구분할 수 있으며 이를 CRUD operation 이라 함.
이러한 개념은 HTTP 프로토콜에도 적용되어, POST, GET, PUT, DELETE method로 사용된다.
일반적인 컴퓨터 시스템에서 가장 중요한 operation은 ? Search(Read)

정렬된 Array 또는 List의 검색에 적합
Array 또는 List의 중앙에 있는 값을 조사하여 찾고자 하는 항목이 왼쪽 또는 오른쪽 부분 Array 또는 List에 있는지 비교하여 검색의 범위를 반으로 줄여가며 검색 진행
시간복잡도는 O(log2N)
e.g., 70억 명중에서 특정한 이름 탐색


infoDic = {'roomId': 1, 'name': '휴게실', 'temp': 22.5, 'humidity': 60, 1:True, 2:False }
print(infoDic)
print(type(infoDic))
subject = {'kor': '0101', 'eng': '0102', 'math': '0103', 'kor': '0100'}
print(subject)
subject = {'kor': '0101', 'eng': '0102', 'math': '0103', 'art': '0103'}
print(subject)
a = dict()
print(a)
print(type(a))
b = {}
print(b)
print(type(b))
subject = {'kor': '0101', 'eng': '0102', 'math': '0103'}
subject['eng']
subject[0]
subject['sci']
rank = {1: '삼성전자', 2:'SK하이닉스', 3:'카카오'}
rank[1]
subject = {'kor': '0101', 'eng': '0102', 'math': '0103'}
code = subject.get('math')
print(code) # 0103
code = subject.get('game')
print(code) # None
code = subject.get('game', 'unknown')
print(code) # unknown
subject['sci'] = '0110'
print(subject)
print(subject) # {'kor': '0101', 'eng': '0102', 'math': '0103', 'sci': '0110'}
del subject['math'] # 'math'를 key로 가지는 요소 삭제
print(subject) # {'kor': '0101', 'eng': '0102', 'sci': '0110'}
del(subject['eng']) # 'eng'를 key로 가지는 요소 삭제
print(subject) # {'kor': '0101', 'sci': '0110'}
subject.clear()
print(subject) # {}, 모든 요소가 삭제되었으나 dictionary는 남아 있음
del(subject)
print(subject) # subeject 자체가 삭제되었음
a = {'a':1, 'b':2, 'c':3}
a.update({'b':22, 'c':33}) # 여러 요소 동시 수정
print(a) # {'1': 1, '2': 22, '3': 33}
a.update({'d':44, 'e':55}) # key가 없으면 추가
print(a) # {'1': 1, '2': 22, '3': 33, '4': 44, '5': 55}
a = {'a':1, 'b':2, 'c':3}
print('b' in a) # True
print('d' in a) # False
subject = {'kor': '0101', 'eng': '0102', 'math': '0103', 'sci': '0110'}
name = subject.keys() # key 추출
print(name) # dict_keys(['kor', 'eng', 'math', 'sci'])
type(name) # <class 'dict_keys'>
subject = {'kor': '0101', 'eng': '0102', 'math': '0103', 'sci': '0110'}
code = subject.values() # value 추출
print(code) # dict_values(['0101', '0102', '0103', '0110'])
type(code) # <class 'dict_values'>
subject = {'kor': '0101', 'eng': '0102', 'math': '0103', 'sci': '0110'}
subCode = subject.items() # key와 value 추출
print(subCode) # dict_items([('kor', '0101'), ('eng', '0102'), ('math', '0103'), ('sci', '0110')])
type(subCode) # <class 'dict_items'>
subject = {'kor': '0101', 'eng': '0102', 'math': '0103', 'sci': '0110'}
name = subject.keys() # key 추출
nameList = list(name) # name dict_keys 를 list로 변환
print(nameList) # ['kor', 'eng', 'math', 'sci']
type(nameList) # <class 'list'>
code = subject.values() # value 추출
codeList = list(code) # code dict_values 를 list로 변환
print(codeList) # ['0101', '0102', '0103', '0110']
subCode = subject.items() # key와 value 추출
subCodeList = list(subCode) #subCode dict_items 를 list로 변환
print(subCodeList) # [('kor', '0101'), ('eng', '0102'), ('math', '0103'), ('sci', '0110')]
List나 Tuple을 Dictionary로 변환 dict()
subjectList = [['kor', '0101'], ['eng', '0102'], ['math', '0103'], ['sci', '0110']]
subjectDic = dict(subjectList) # list를 dictionary로 변환
print(subjectDic) # {'kor': '0101', 'eng': '0102', 'math': '0103', 'sci': '0110'}
type(subjectDic) # <class 'dict'>
a = [1, 2, 3]
b = dict(a)