[파이썬] 딕셔너리

Dragony·2020년 4월 1일
0

파이썬

목록 보기
8/14

참고 사이트 <데이터 사이언스 스쿨>

해시(hash), 연관배열(Associative array) 같은 자료형이다.
파이썬에서는 이러한 자료형을 딕셔너리(Dictionary)라고 하는데, (key,value)의 쌍으로 되어있다.

딕셔너리는 리스트나 튜플처럼 순차적으로(sequential) 해당 요소 값을 구하지 않고 Key를 통해 Value를 얻는다. 이것이 바로 딕셔너리의 가장 큰 특징이다.

딕셔너리 생성

기본적인 딕셔너리의 모양은,
{key1:value1, key2:value2, key3:value3...}

이고, key와 value의 쌍 여러개가 {}로 둘러쌓여 있다.
각각의 요소는 key:value 형태로 이루어져 있고 콤마(,)로 구분되어 있다.

key에는 변하지 않는 값을 사용하고 value에는 변하는 값, 변하지 않는 값 모두 사용할 수 있다.


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

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

다음 처럼 value에 문자열과 리스트도 넣을 수 있다.

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

딕셔너리는 순서를 따지지 않는다.
순서에는 원칙이 없고, 중요한 것은 '무엇이 추가되었는가'이다.

딕셔너리 쌍 추가하기


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

a[2]='b'와 같이 입력하면, 딕셔너리 a에 key=2, value='b' 를 갖는 딕셔너리 쌍이 추가된다.

딕셔너리 요소 삭제하기


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

마찬가지로 del 함수를 쓴다.
del a[Key] 를 입력해서 지정한 key에 해당하는 {key:value} 쌍이 삭제된다.

딕셔너리를 사용하는 방법

딕셔너리에서 key를 사용해 value 얻기


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

딕셔너리는 인덱싱 방법을 적용할 수 없고, key 값으로만 value에 접근할 수 있다.

주의사항

딕셔너리에서 key는 고유한 값이므로 중복되는 key 값을 설정 해 놓으면 하나를 제외한 나머지 것들이 모두 무시된다는 점이다.
어떤 것이 무시될 지는 예측할 수 없다.


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

또 한가지 주의해야 할 점은, Key에 리스트는 쓸 수 없다는 것이다.
하지만 튜플은 key로 쓸 수 있다.
딕셔너리의 key로 쓸 수 있느냐 없느냐는 key가 변하는 값인지 변하지 않는 값인지에 달려있다.
리스트는 그 값이 변할 수 있기 때문에 key로 쓸 수 없는 것이다.
리스트를 key로 설정하면 형 오류(typederrer)가 발생한다.

따라서 key 값으로 딕셔너리를 사용할 수 없는 것도 자명하다.

딕셔너리 관련 함수들

Key 리스트 만들기(keys)


>>> a={'name':'pey','phone':'01012341234', '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)
...
name
phone
birth

dict_keys 객체를 리스트로 변환하려면 다음과 같이 하면 된다.


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

Value 리스트 만들기(values)


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

Key를 얻는 것과 마찬가지 방법으로 Value만 얻고 싶다면 a.values() 처럼 values 함수를 사용하면 된다. values 함수를 호출하면 dict_values 객체가 리턴되는데, dict_values 객체 역시 dict_keys 객체와 마찬가지로 리스트를 사용하는 것과 동일하게 사용하면 된다.

Key,Value 쌍 얻기(items)


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

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

key:value 쌍 모두 지우기(clear)


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

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

key로 value 얻기 (get)


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

get(x) 함수는 x라는 key에 대응되는 value 값을 돌려준다.
a.get('name') 은 a['name']과 동일한 결과값을 리턴한다.

다만, 존재하지 않는 key(nokey)로 값을 가져오려고 할 경우, a['nokey']는 오류를 발생시키고 get('nokey')는 None을 리턴한다는 차이가 있다.

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


>>> a.get('nokey','default')
'default'

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


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

'name' 이라는 문자열은 a 딕셔너리 key중 하나이다.
따라서 'name' in a를 호출하면 참(true)를 리턴한다.
반대로 존재하지 않는 키인 'email' in a 를 호출하면 거짓(false)를 리턴한다.

profile
안녕하세요 :) 제 개인 공부 정리 블로그입니다. 틀린 내용 수정, 피드백 환영합니다.

0개의 댓글