본문 바로가기

파이썬 튜터리얼 정리 5.5 자료구조 - 딕셔너리


파이썬 튜터리얼 정리 

5.5 자료구조 - 딕셔너리 辞書型


점프투파이썬 -딕셔너리 : https://wikidocs.net/16


- '딕셔너리'는 다른 언어에서 

    '연관 메모리 associated memory / 연관 배열 associative array / 해시hash 의 형태로 발견된다.


-  인덱싱 방법 : 시퀀스 - 숫자 vs 딕셔너리 - 'key'



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


※ Key에는 변하지 않는 값을 사용하고, Value에는 변하는 값과 변하지 않는 값 모두 사용할 수 있다.


- 불변객체를 key로 사용할 수 있음 (문자열, 숫자)

- 가변객체는 x : append(), extend() 등으로 수정될 수 있기 때문이다.

- 리스트, 가변객체를 포함한 튜플


- 리스트나 튜플처럼 순차적으로(시퀀스, sequential)해당 요소값을 구하지 않음.

- key를 통해 value를 얻음.



ex)

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

keyvalue
namepey
phone01199993323
birth1118


ex) Key 1, Value 'hi'

>>> a = {1: 'hi'}

ex) Key a, Value에 리스트

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

ex) 빈 딕셔너리 

>>> a = { }



딕셔너리 쌍 추가하기

>>> 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}
>>> grade['pey']
10
>>> grade['julliet']
99
>>> a = {1:'a', 2:'b'}
>>> a[1]
'a'
>>> a[2]
'b'


주의

이미 사용하고 있는 키로 저장하면 예전 값은 지워짐.

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


key로 list를 사용할 수 없다. 

(튜플은 가능! key로 쓸 수 있느냐 없느냐는 key가 변하는 값인지 아닌지에 달려있다.)

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


존재하지 않는 값으로 추출 x - 에러



딕셔너리 관련 함수/표현



- list(dict) : 딕셔너리의 모든 키의 리스트를 순서대로 반환 

- sorted(dict

- 키워드 in : 키가 딕셔너리에 있는지 검사


>>> tel = {'jack': 4098, 'sape': 4139}
>>> tel['guido'] = 4127
>>> tel
{'jack': 4098, 'sape': 4139, 'guido': 4127}
>>> tel['jack']
4098
>>> del tel['sape']
>>> tel['irv'] = 4127
>>> tel
{'jack': 4098, 'guido': 4127, 'irv': 4127}

>>> list(tel) ['jack', 'guido', 'irv'] >>> sorted(tel) ['guido', 'irv', 'jack']


>>> 'guido' in tel

True >>> 'jack' not in tel False



- 생성자 dict() : key-value 쌍들의 시퀀스로 부터 직접 딕셔너리를 구성

>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
{'sape': 4139, 'guido': 4127, 'jack': 4098}



딕셔너리 컴프리헨션

>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}



키가 간단한 문자열일 때, 키워드 인자를 사용해서 쌍을 지정하기가 쉽습니다.

>>> dict(sape=4139, guido=4127, jack=4098)
{'sape': 4139, 'guido': 4127, 'jack': 4098}




- dict.keys( ) : Key 리스트 만들기

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


for-in 적용하기

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

 

list로 변환하기

>>> list(a.keys())
['name', 'phone', 'birth']


- dict.values() : Value 리스트 만들기

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

dict_values 객체 역시 dict_key 객체와 마찬가지로 리스트를 사용하는 것과 동일하게 사용하면 된다.



- dict.items() : key-Value 쌍 얻기

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

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


- dict.clear() : key-Value 쌍 모두 지우기

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

clear() 함수는 딕셔너리 안의 모든 요소를 삭제한다. 

빈 리스트를 [ ], 빈 튜플을 ()로 표현하는 것과 마찬가지로 빈 딕셔너리도 { }로 표현한다


- dict.get('key') : key로 value 얻기

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

a.get('name')은 a['name']을 사용했을 때와 동일한 결과값을 리턴


다만

 a['nokey']처럼 딕셔너리에 없는 키로 값을 가져오려고 할 경우

 a['nokey']는 Key 오류 /a.get('nokey')는 None을 리턴하는 차이

어떤것을 사용할지는 여러분의 선택이다.

※ 여기서 None은 "거짓"이라는 뜻이라고만 알아두자.

>>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
>>> print(a.get('nokey'))
None
>>> print(a['nokey'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'nokey'

딕셔너리 안에 찾으려는 key 값이 없을 경우

미리 정해 둔 디폴트 값을 대신 가져오게 하고 싶을 때에는 get(x, '디폴트 값')을 사용하면 편리하다.

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