딕셔너리?? - 말 그대로 사전 처럼 key value가 있고 결과값을 뱉어내주는 대응(Value)을 모아놓은것
dic = {'name' : 'pey', 'phone' : '01199991234', 'birth' : '1130' 'list' : [1,2,3]}
딕셔너리 쌍 추가하기
a = { 1:'a' }
a[2] = 'b'
a['test'] = 'set'
print(a)
{'test': 'set', 1: 'a', 2: 'b'}
a = { 1:'a' }
a[2] = 'b'
a['test'] = 'set'
del a[1]
print(a)
{'test': 'set', 2: 'b'}
먼저 딕셔너리에서 Key는 고유한 값이므로 중복되는 Key 값을 설정해 놓으면 하나를 제외한 나머지 것들이 모두 무시된다는 점을 주의해야 한다. 다음 예에서 볼 수 있듯이 동일한 Key가 2개 존재할 경우 1:'a'라는 쌍이 무시된다. 이때 꼭 앞에 쓴 것이 무시되는 것은 아니고 어떤 것이 무시될지는 예측할 수 없다. 결론은 중복되는 Key를 사용하지 말라는 것이다.
a = { 1:'a' }
a[2] = 'b'
a['test'] = 'set'
del a[1]
print(a)
print(a['test'])
{'test': 'set', 2: 'b'}
set
또 한 가지 주의해야 할 사항은 Key에 리스트는 쓸 수 없다는 것이다. 하지만 튜플은 Key로 쓸 수 있다. 딕셔너리의 Key로 쓸 수 있느냐 없느냐는 Key가 변하는 값인지 변하지 않는 값인지에 달려 있다. 리스트는 그 값이 변할 수 있기 때문에 Key로 쓸 수 없는 것이다. 아래 예처럼 리스트를 Key로 설정하면 리스트를 키 값으로 사용할 수 없다는 형 오류(TypeError)가 발생한다.
a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
print(a.keys())
dict_keys(['name', 'phone', 'birth'])
[파이썬 3.0 이후 버전의 keys 함수, 어떻게 달라졌나?]
파이썬 2.7 버전까지는 a.keys() 호출 시 리턴값으로 dict_keys가 아닌 리스트를 리턴한다. 리스트를 리턴하기 위해서는 메모리의 낭비가 발생하는데 파이썬 3.0 이후 버전에서는 이러한 메모리 낭비를 줄이기 위해 dict_keys라는 객체를 리턴해 준다. 다음에 소개할 dict_values, dict_items 역시 파이썬 3.0 이후 버전에서 추가된 것들이다. 만약 3.0 이후 버전에서 리턴값으로 리스트가 필요한 경우에는 "list(a.keys())"를 사용하면 된다. dict_keys, dict_values, dict_items 등은 리스트로 변환하지 않더라도 기본적인 반복성(iterate) 구문(예: for문)들을 실행할 수 있다.
a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
for k in a.keys():
print(k)
phone
name
birth
흠… for 문에 대해서 아직 완벽하게 잘 모르겠음
a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
print(list(a.keys()))
print(list(a.values()))
['phone', 'name', 'birth']
['0119993323', 'pey', '1118']
Key, Value 쌍 얻기(items)
a.items()
dict_items([('name', 'pey'), ('phone', '0119993323'), ('birth', '1118')])
items 함수는 key와 value의 쌍을 튜플로 묶은 값을 dict_items 객체로 돌려준다.
Key, Value 쌍 모두 지우기(clear)
a.clear()
print(a)
{}
clear() 함수는 딕셔너리 안의 모든 요소를 삭제한다. 빈 리스트를 [ ], 빈 튜플을 ()로 표현하는 것과 마찬가지로 빈 딕셔너리도 { }로 표현한다.
Key로 Value얻기(get)
a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
print(a.get('name'))
'pey'
print(a.get('phone'))
'0119993323'
get(x) 함수는 x라는 key에 대응되는 value를 돌려준다. 앞서 살펴보았듯이 a.get('name')은 a['name']을 사용했을 때와 동일한 결과값을 돌려받는다.
다만, 다음 예제에서 볼 수 있듯이 a['nokey']처럼 존재하지 않는 키(nokey)로 값을 가져오려고 할 경우 a['nokey']는 Key 오류를 발생시키고 a.get('nokey')는 None을 리턴한다는 차이가 있다. 어떤것을 사용할지는 여러분의 선택이다.
(※ 여기서 None은 "거짓"이라는 뜻이라고만 알아두자.)
딕셔너리 안에 찾으려는 key 값이 없을 경우 미리 정해 둔 디폴트 값을 대신 가져오게 하고 싶을 때에는 get(x, '디폴트 값')을 사용하면 편리하다.
print(a.get('foo', 'bar'))
'bar'
a 딕셔너리에는 'foo'에 해당하는 값이 없다. 따라서 디폴트 값인 'bar'를 리턴한다.
해당 Key가 딕셔너리 안에 있는지 조사하기(in)
a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
'name' in a
True
'email' in a
False
'name'이라는 문자열은 a 딕셔너리의 key 중 하나이다. 따라서 'name' in a를 호출하면 참(True)을 리턴한다. 반대로 'email' 은 a 딕셔너리 안에 존재하지 않는 key이므로 거짓(False)을 리턴하게 된다.