전사를 거꾸로 말해보자 사전이다. 사전을 영어로 하면? dictionary ㅋㅋㅋㅋ
>>> a = {'name':'David', 'age':'20', 'location':'seoul'}
위의 예시를 보면 대응 관계를 나타낸 자료형이 있다. 이것을 연관배열(Associative array) 혹은 해시(Hash)라고 부른다. 파이썬에서는 이것을 딕셔너리(dictionary)라고 한다.
설명이 좀 복잡하게 들릴 수 있지만 쉽게 생각하자면 사전이랑 다를바가 없다.
'apple':'사과' 이렇게 보면 apple은 한국어로 사과라고 알려주듯이 딕셔너리는 Key와 Value가 커플이 꼭 있는 자료형이다. 아까의 예제를 보면 'apple'이 key 그리고 '사과'가 value인 셈이다. 딕셔너리 같은 경우는 리스트나 튜플 처럼 순차적으로 해당 요솟값을 구하지 않고 무조건 Key를 통해 value를 얻는다.
아까 보여준 예시 처럼 key:value 형태로 이뤄줘야하고 {curly bracket}으로 감싸줘야한다. 여러가지의 형태가 있는데 아래 같이 가능하다.
>>> a = {1:'python'} key를 정수 1 value를 'python' 윤석열 말고 문자열 >>> a = {'a': [1,2,3]} value를 리스트에 넣을 수도 있다
딕셔너리 쌍 추가하기
>>> a = {1:'one'} >>> a[2] = 'two' ⬅️ {2:'b'} 쌍 추가 >>> a {1:'one', 2:'two'} >>> a[3] = [1, 2, 3] ⬅️ {3:[1,2,3]} 리스트형 쌍 추가도 가능 >>> a {1:'one', 2:'two', 3:[1, 2, 3]}
딕셔너리 요소 삭제하기
>>> del a[3] ⬅️ key가 3인 key:value 쌍을 삭제하라 >>> a {1:'one', 2:'two'}
del 함수를 이용하면 del a[key]처럼 입력한 key에 포함이 된 {key:value}를 삭제
그 이유는 간단하다 여지껏 리스트나 튜플 같은 경우는 요소 값을 구하려하면
인덱싱이나 슬라이싱 기법을 사용했지만 딕셔너리는 key를 통하여 value를
구하면 끝이다. 또한 리스트나 튜플에서 a[1]는 두 번째 요소를 뜻하는게 아니라 key에 해당하는 1을 나타낸다. 말 그대로 심플하고 간단하다.
❗️하.지.만❗️ 딕셔너리 만들때도 주의해야 할 상황이 하나 있다.
>>> a = {1:'one', 1:'two'} >>> a {1:'two'}
위와 값이 key가 중복일 경우 딕셔너리에서는 어떤 key에 해당하는 value를 불러야 할지 몰라서 한 쌍이 무시가 된다. 그 외에도 key에 리스트는 사용 할 수 없지만 튜플은 사용이 가능하다. 그 이유는 key가 변하는 값이면 사용 할 수 없다 고로 튜플은 변하지 않는 값이기에 사용이 가능하다.
key 리스트 만들기(keys)
>>> a = {'name':'daiquiri', 'main':'rum', 'glass':'1'} >>> a.keys() dict_keys(['name', 'main', 'glass'])
a.keys() 딕셔너리 a의 key만 모아서 dict_keys 객체를 돌려준다. 그렇다면 key들을 리스트로 변환을 하려면 어떻게 해야할까? 아래처럼 하면 된다.
>>> list(a.keys()) ['name', 'main', 'glass']
Value 리스트 만들기(values)
>>> a.values() dict_values(['daiquiri', 'rum', '1'])
Key, Value 쌍 얻기(item)
>>> a.items() dict_items([('name','daiquiri'), ('main', 'rum'), ('glass', '1')])
Key:Value 쌍 모두 지우기(clear)
>>> a.clear() >>> a {} ⬅️ 딕셔너리는 {curly bracket}로 표현한다.
key로 Value 얻기(get)
>>> a = {'name':'daiquiri', 'main':'rum', 'glass':'1'} >>> a.get('name') 'daiquiri' >>> a.get('main') 'rum'
그럼 만약 존재 하지 않는 Key의 Value를 구하려고 하면 어떻게 될까?
>>> a = {'name':'daiquiri', 'main':'rum', 'glass':'1'} >>> print(a.get('nokey')) 방법 1 None >>> print(a['nokey']) 방법 2 Traceback (most recent call last): File"<stdin>", line 1, in <module> KeyError: 'nokey'
요렇게 두가지 방식이 있다. 참고로 None은 거짓이라는 뜻이다.
그럼 딕셔너리 안에 찾으려는 Key 값이 없을 경우 미리 정해 둔 디폴트 값을
대신 가져오게 하고 싶을 때는 get(x, '디폴트값')을 사용하면 된다.
>>> a.get('x', '디폴트값') '디폴트값'
해당하는 Key가 딕셔너리 안에 있는지 조사하기(in)
>>> a = {'name':'daiquiri', 'main':'rum', 'glass':'1'} >>> 'name' in a True >>> 'type' in a False