딕셔너리
즉, people(Key) 이라는 단어에 사람(Value) 또는 baseball(Key) 이라는 단어에 야구(Value)라는 뜻이 부합되는 것처럼 Key와 Value를 한 쌍으로 가지는 자료형
이라는 말이다.
딕셔너리는 순차적으로 해당 요솟값을 구하지 않고 Key를 통해 Value를 얻는 가장 큰 장점
을 가지고 있다. 즉, 순차적으로 모두 검색하는게 아닌 baseball이라는 단어가 있는 곳만 본다는 것이다.
{Key1: Value1, Key2: Value2,Key3: Value3, ...}
# exam
>>> dic = {'people': '사람', 'baseball': '야구'}
위와 같이 Key와 Value의 쌍 여러 개가 {}로 둘러싸여 있고 쉼표(,)로 구분
되어 있다.
또한 다음 예시처럼 Value에 리스트를 넣을 수도 있다.
# exam
>>> a = {'a': [1,2,3]}
>>> a = {1: 'a'}
>>> a[2] = 'b'
>>> print(a)
# Output
{1: 'a', 2: 'b'}
{1:'a'} 딕셔너리에 a[2] = 'b'
와 같이 입력하면 딕셔너리 a에 Key와 Value가 각 2와 'b'인 {2:'b'}
딕셔너리 쌍이 추가된다.
>>> a['name'] = 'pey'
>>> print(a)
# Output
{1: 'a', 2: 'b', 'name': 'pey'}
다음과 같이 딕셔너리 a에 {'name':'pey'}쌍이 추가되었다.
>>> del a[1]
>>> print(a)
# Output
{2: 'b', 'name': 'pey'}
딕셔너리 요소 중 1을 지워진 것처럼 del a[key]
를 입력하면 지정한 Key에 해당하는 {key:Value} 쌍이 삭제 된다.
딕셔너리에서 Key 값이 중복이 되면 안되며
, 만약 중복일 경우 최후에 해당되는 Key에 해당하는 Value 를 제외하고 모두 무시하게 된다는 점이다. >>> a = {1:'a', 1:'b'}
>>> print(a)
# Output
{1: 'b'}
다음과 같이 출력이 되는데, 이것은 Key를 통해서 Value를 얻는 딕셔너리의 특징
때문이다.
Key에 리스트를 쓸 수 없다.
딕셔너리의 Key는 immutable 즉, 변하지 않는 값들만 넣을 수 있게 때문에 값이 변할 수 있는 리스트는 Key로 쓸 수 없다.>>> a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'}
>>> print(a.keys())
# Output
dict_keys(['name', 'phone', 'birth'])
2.7 버전까지만 해도 a.keys() 메서드를 호출하면 dict_keys가 아닌 리스트를 리턴했었는데, 이로인해 메모리 낭비(Memory Leak)가 발생했는데, 3.0 버전 이후 부터는 dict_keys의 객체를 리턴
하도록 변경되었다.
# 만약 객체가 아닌 리스트로 리턴 받고 싶을 경우
>>> print(list(a.keys()))
['name', 'phone', 'birth']
>>> print(a.values())
# Output
dict_values(['pey', '010-9999-1234', '1118'])
Key를 얻는 것과 같은 방법으로 Value만 얻고 싶다면 values 메서드를 사용 하면 된다. values 함수를 호출하면 dict_values 객체를 리턴
한다.
>>> print(a.items())
# Output
dict_items([('name', 'pey'), ('phone', '010-9999-1234'), ('birth', '1118')])
items 메서드는 Key와 Value의 쌍을 dict_items 객체로 리턴
한다.
>>> a.clear()
>>> a
{}
>>> a = {'name':'pey', 'phone':'010-9999-1234', 'birth': '1118'}
>>> print(a.get('nokey'))
# Output
None # 거짓이라는 뜻이라고 이해하면 된다.
----------------------------------
----------------------------------
>>> print(a['nokey’])
# Output
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'nokey'
----------------------------------
----------------------------------
>>> print(a.get('nokey', 'foo'))
# Output
'foo'
>>> a = {'name':'pey', 'phone':'010-9999-1234', 'birth': '1118'}
>>> print('name' in a)
# Output
True
----------------------------------
>>> print('email' in a)
# Output
False
'name'문자열은 a 딕셔너리의 Key 중 하나이기에 True
로 나온 것이며, 'email'문자열은 a 딕셔너리의 Key 로 존재하지 않기에 False
가 출력이 된 것이다.