PYTHON. 02. 파이썬의 프로그래밍의 기초, 자료형. 


02-5 딕셔너리 자료형


딕셔너리는 리스트나 튜플처럼 순차적으로(sequential) 해당 요소값을 구하지 않고 Key를 통해 Value를 얻는다. 이것이 바로 딕셔너리의 가장 큰 특징이다. baseball이라는 단어의 뜻을 찾기 위해 사전의 내용을 순차적으로 모두 검색하는 것이 아니라 baseball이라는 단어가 있는 곳만 펼쳐 보는 것이다.

딕셔너리는 어떻게 만들까?

{Key1:Value1, Key2:Value2, Key3:Value3 ...}

>>> dic = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}


딕셔너리 dic의 정보

keyvalue
namepey
phone01199993323
birth

1118


딕셔너리 쌍 추가, 삭제하기

1. 딕셔너리 쌍 추가하기

// 딕셔너리는 순서를 따지지 않고, 추가되는 순서는 원칙이 없다

>>> a = {1: 'a'} >>> a[2] = 'b' >>> a {2: 'b', 1: 'a'}
>>> a['name'] = 'pey' {'name':'pey', 2: 'b', 1: 'a'}
>>> a[3] = [1,2,3] {'name': 'pey', 3: [1, 2, 3], 2: 'b', 1: 'a'}

2. 딕셔너리 요소 삭제하기

>>> del a[1] >>> a {'name': 'pey', 3: [1, 2, 3], 2: 'b'}

딕셔너리를 사용하는 방법

딕셔너리에서 Key 사용해 Value 얻기

>>> grade = {'pey': 10, 'julliet': 99} >>> grade['pey'] 10 >>> grade['julliet'] 99

// 딕셔너리 변수에서 [] 안의 숫자 1은 두 번째 요소를 뜻하는 것이 아니라 Key에 해당하는 1을 나타낸다.

>>> a = {1:'a', 2:'b'} >>> a[1] 'a' >>> a[2] 'b'

>>> a = {'a':1, 'b':2} >>> a['a'] 1 >>> a['b'] 2

>>> dic = {'name':'pey', 'phone':'0119993323', 'birth': '1118'} >>> dic['name'] 'pey' >>> dic['phone'] '0119993323' >>> dic['birth'] '1118'

딕셔너리 만들 때 주의할 사항

1.  딕셔너리에서 Key는 고유한 값이므로 중복되는 Key 값을 설정해 놓으면 하나를 제외한 나머지 것들이 모두 무시된다는 점을 주의해야 한다. 다음 예에서 볼 수 있듯이 동일한 Key가 2개 존재할 경우 1:'a'라는 쌍이 무시된다. 이때 꼭 앞에 쓴 것이 무시되는 것은 아니고 어떤 것이 무시될지는 예측할 수 없다. 결론은 중복되는 Key를 사용하지 말라는 것이다.

>>> a = {1:'a', 1:'b'} >>> a {1: 'b'}

2.  Key에 리스트는 쓸 수 없다는 것이다. 하지만 튜플은 Key로 쓸 수 있다. 딕셔너리의 Key로 쓸 수 있느냐 없느냐는 Key가 변하는 값인지 변하지 않는 값인지에 달려 있다. 리스트는 그 값이 변할 수 있기 때문에 Key로 쓸 수 없는 것이다. 아래 예처럼 리스트를 Key로 설정하면 리스트를 키 값으로 사용할 수 없다는 형 오류(TypeError)가 발생한다.

>>> a = {[1,2] : 'hi'} Traceback (most recent call last): File "", line 1, in ? TypeError: unhashable type

딕셔너리 관련 함수들

Key 리스트 만들기(keys)

>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'} >>> a.keys() dict_keys(['name', 'phone', 'birth'])

// a.keys()는 딕셔너리 a의 Key만을 모아서 dict_keys라는 객체를 리턴한다.

dict_keys 객체는 다음과 같이 사용할 수 있다. 리스트를 사용하는 것과 차이가 없지만, 리스트 고유의 함수인 append, insert, pop, remove, sort등의 함수를 수행할 수는 없다.

>>> for k in a.keys(): ... print(k) ... phone birth name

Value 리스트 만들기(values)

>>> a.values() dict_values(['pey', '0119993323', '1118'])

Key, Value 쌍 얻기(items)

>>> a.items() dict_items([('name', 'pey'), ('phone', '0119993323'), ('birth', '1118')])

//items 함수는 key와 value의 쌍을 튜플로 묶은 값을 dict_items 객체로 돌려준다.

Key: Value 쌍 모두 지우기(clear)

>>> a.clear() >>> a {}

// clear() 함수는 딕셔너리 안의 모든 요소를 삭제한다. 빈 리스트를 [ ], 빈 튜플을 ()로 표현하는 것과 마찬가지로 빈 딕셔너리도 { }로 표현한다.

Key로 Value얻기(get)

>>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'} >>> a.get('name') 'pey' >>> a.get('phone') '0119993323'

// get(x) 함수는 x라는 key에 대응되는 value를 돌려준다. 
// 앞서 살펴보았듯이 a.get('name')은 a['name']을 사용했을 때와 동일한 결과값을 돌려받는다.
// 다만, 다음 예제에서 볼 수 있듯이 a['nokey']처럼 존재하지 않는 키(nokey)로 값을 가져오려고 할 경우 
a['nokey']는 Key 오류를 발생시키고, a.get('nokey')는 None을 리턴한다는 차이가 있다. 어떤것을 사용할지는 여러분의 선택이다.

>>> a.get('nokey') >>> a['nokey'] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'nokey'

// 딕셔너리 안에 찾으려는 key 값이 없을 경우 미리 정해 둔 디폴트 값을 대신 가져오게 하고 싶을 때에는 get(x, '디폴트 값')을 사용하면 편리하다.

>>> a.get('foo', 'bar') 'bar'

해당 Key가 딕셔너리 안에 있는지 조사하기(in)

>>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'} >>> 'name' in a True >>> 'email' in a False



Posted by 너래쟁이
: