연관 배열 (Associative array), 해시(Hash)
ex) 이름 = 홍길동, 생일 = 몇 월 며칠 등과 같이 대응 관계로 나타낼 수 있는 자료형
파이썬에서는 이러한 자료형을 딕셔너리라고 함
Key를 통해 Value를 얻음
{Key1:Value1, Key2:Value2, Key3:Value3, ...}
각각의 요소는 Key : Value 형태로 이루어져 있고 쉽표(,)로 구분되어 있음
딕셔너리 쌍 추가하기
>>>a={1:'a'}
>>>a[2] = 'b'
>>>a
{1: 'a', 2: 'b'}
>>>a['name'] = 'pey'
>>>a
{1: 'a', 2: 'b', 'name': 'pey'}
>>>a[3]=[1,2,3]
>>>a
{1: 'a', 2: 'b', 'name': 'pey', 3: [1,2,3]}
딕셔너리 요소 삭제하기
>>>del a[1]
>>>a
{2: 'b', 'name': 'pey', 3: [1,2,3]}
딕셔너리에서 Key 사용해 Value 얻기
>>>grade = {'pey': 10, 'julliet': 99, 1: 'a', 2: 'b'}
>>>grade['pey']
10
>>>grade['julliet']
99
>>> grade[1]
'a'
>>> grade[2]
'b'
딕셔너리 만들 때 주의할 사항
1. Key는 고유한 값이므로 중복되는 Key 값을 설정해 놓으면 하나를 제외한 나머지 것들이 모두 무시된다는 점을 주의.
>>> a={1:'a',1:'b'}
>>> a
{1: 'b'}
2. Key에는 리스트는 쓸 수 없다는 점을 주의. 딕셔너리의 Key로 쓸 수 있느냐 없느냐는 Key가 변하는 값인지 변하지 않는 값인지에 달려 있음. 리스트는 그 값이 변할 수 있기 때문에 Key로 사용 불가. 하지만, 튜플은 Key로 사용 가능.
>>> a={[1,2]:'hi'}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
딕서녀리 관련 함수
1. Key 리스트 만들기 (keys)
① a.keys() : 딕셔너리 a의 Key만을 모아서 dict_keys 객체를 돌려줌
>>> a={'name':'pey', 'phone':'0123456789', 'birth':'1111'}
>>> a.keys()
dict_keys(['name', 'phone', 'birth'])
② dict_keys 객체 사용 예시: 리스트를 사용하는 것과 차이가 없지만, 리스트 고유의 append, insert, pop, remove, sort 함수 수행 불가
>>> for k in a.keys():
... print(k) # 들여쓰기 하지 않으면 오류 발생함
...
name
phone
birth
③ dict_keys 객체를 리스트로 변환하려면 다음과 같이 수행
>>> list(a.keys())
['name', 'phone', 'birth']
2. Value 리스트 만들기 (values)
value 함수를 호출하면 dict_values 객체를 돌려줌
>>> a.values()
dict_values(['pey', '0123456789', '1111'])
3. Key, Value 쌍 얻기 (items)
items 함수는 Key와 Value의 쌍을 튜플로 묶은 값을 dict_items 객체로 돌려줌
>>> a.items()
dict_items([('name', 'pey'), ('phone', '0123456789'), ('birth', '1111')])
4. Key:Value 쌍 모두 지우기 (clear)
clear 함수는 딕셔너리 안의 모든 요소를 삭제함.
빈 리스트를 [], 빈 튜플을()로 표현하는 것과 마찬가지로 빈 딕셔너리도 {}로 표현
>>> a.clear()
>>> a
{}
5. Key로 Value 얻기 (get)
get(x) 함수는 x라는 Key에 대응되는 Value를 돌려줌
>>> a={'name':'pey', 'phone':'0123456789', 'birth':'1111'}
>>> a.get('name')
'pey'
>>> a.get('phone')
'0123456789'
존재하지 않는 키로 값을 가져오려고 할 경우 Key 오류를 발생시키고 None을 돌려준다는 차이가 있음
>>> a.get('nokey')
>>> print(a.get('nokey'))
None
>>> print(a['nokey'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'nokey'
딕셔너리 안에 찾으려는 Key 값이 없을 경우 미리 정해 둔 디폴트 값을 대신 가져오게 하고싶을 때에는 get(x,'디폴트값'을 사용하면 편리
akey에 해당하는 값이 없으므로 디폴트 값인 ''vdefault'를 돌려줌
>>> a.get('akey','vdefault')
'vdefault'
6. 해당 Key가 딕셔너리 안에 있는지 조사하기 (in)
'name' 문자열은 a 딕셔너리의 Key 중 하나이므로 참을 돌려줌
'email'은 a 딕셔너리 안에 존재하지 않는 Key이므로 거짓을 돌려줌
>>> a={'name':'pey', 'phone':'0123456789', 'birth':'1111'}
>>> 'name' in a
True
>>> 'email' in a
False