딕셔너리 자료형

honeyricecake·2022년 6월 26일
0

파이썬

목록 보기
4/26

딕셔너리란?

<Key, Value>의 한 쌍을 가지는 자료형을 말한다.
예를 들어 영한사전에서 Key : baseball을 찾으면 Value: 야구를 얻을 수 있다.

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

baseball 이라는 단어의 뜻을 찾기 위해 사전의 내용을 순차적으로 모두 검색하는 것이 아니라 baseball 이라는 단어가 있는 곳만 펼쳐보는 것이다.

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

ex.

dic = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
으로 딕셔너리를 만들게 되면 딕셔너리 dic은

이렇게 만들어지게 된다.

다음 예는 Key로 정수값 1, Value로 문자열 'hi'를 사용한 예이다.

a = {1: 'hi'}

다음과 같이 Value에 리스트를 넣을 수도 있다.

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

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

(1) 딕셔너리 쌍 추가하기

a = {1 : 'a'}
a[2] = 'b'
print(a)

{1: 'a', 2: 'b'}이 출력됨을 볼 수 있다.

a[2] = b는 딕셔너리 a에 Key가 2이고 Value가 'b'인 쌍을 추가한다는 의미이다.

(2) 딕셔너리 요소 삭제하기

del a[Key]

딕셔너리 a에서 Key에 해당하는 Key:Value쌍을 삭제한다는 의미이다.

딕셔너리를 사용하는 방법

요솟값 얻기

리스트나 튜플, 문자열은 인덱싱, 슬라이싱 기법 중 하나를 사용했으나
딕셔너리는 Key를 사용해 Value를 구하는 방법 뿐이다.

딕셔너리변수이름[Key]를 사용하면 해당 딕셔너리에서 Key에 해당하는 Value를 얻을 수 있다.

딕셔너리 만들 때 주의 사항

  1. 딕셔너리에서 Key는 고유한 값이므로 중복되는 Key값을 설정해 놓으면 하나를 제외한 나머지 것들이 모두 무시된다는 점을 주의해야한다.

ex.

a = {1 : 'a'}
a[1] = 'b'
a[1] = 'c'
print(a)

print(a[1])
print(a[1])
print(a[1])

{1: 'c'}
c
c
c
이 출력됨을 볼 수 있다.
나머지 값들은 다 덮어써지고 1 : 'c'만 남아 Key 1에 해당하는 Value를 출력하면 'c'만 계속 출력된다.

  1. Key에 리스트는 쓸 수 없다

하지만 튜플은 Key로 쓸 수 있다.

딕셔너리의 Key로 쓸 수 있느냐 없느냐는 Key가 immutable인지 아닌지 인데

리스트 a의 경우 객체의 레퍼런스가 변하지 않아도 안의 값이 변할 수 있다.

하지만 튜플은 같은 레퍼런스에 다른 튜플이 올 수 없고, 문자열 역시 마찬가지므로 Key로 쓸 수 있다.

Value 로는 immutable 이든 아니든 들어갈 수 있다.

딕셔너리 관련 함수들

  1. Key 리스트 만들기 (keys)
a = {'name' : 'pey', 'phone' : '0119993323'}
x = a.keys()
print(x)

dict_keys(['name', 'phone']) 이 출력됨을 볼 수 있다.

파이썬 2.7까지는 dict_keys가 아닌 리스트를 돌려주는데 리스트를 돌려주기 위해서는 메모리 낭비가 발생하는데 이러한 메모리 낭비를 줄이기 위해 dict_keys 객체를 리턴한다.

만약 3.0 이후 버전에서 리턴값으로 리스트가 필요한 경우에는 list(a.keys())를 사용하면 된다.
(str(x)와 같은 맥락의 형변환)

dict_keys, dict_values, dict_items 등은 리스트로 변환하지 않더라도 기본적인 반복 구문을 실행할 수 있다.

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

Value리스트 만들기(values)

key 리스트를 얻는 것과 마찬가지 방법으로 dict_values 객체를 리턴한다.

Key,Value 쌍 얻기(items)

a = {'name' : 'pey', 'phone' : '0119993323'}
x = a.items()
print(x)

dict_items([('name', 'pey'), ('phone', '0119993323')]) 가 출력됨을 볼 수 있다.

각각의 item은 튜플임을 출력에서 확인할 수 있다.

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

a.clear()

Tip. 빈 딕셔너리도 () 로 표현한다.

Key로 Value얻기 (get)

a.get(x)는 딕셔너리 a에서 Key x에 대응되는 Value 를 리턴한다.
이는 a[x]와 같다고 생각할 수 있으나
a[x]는 존재하지 않는 키에 대해서 찾을 시 Key 에러 가 발생하고
a.get[x]는 None을 리턴한다.
(None은 C에서 Null에 대응된다.)

a = {'name' : 'pey', 'phone' : '0119993323'}
print(a.get("noKey"))
print(a["noKey"])

처음에는 None이 출력
그다음에는 KeyError: 'noKey'가 출력된다.

이 둘의 결정적인 차이는 에러가 발생하면 코드가 더이상 실행이 안된다는 것이다.

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

a = {'name' : 'pey', 'phone' : '0119993323'}
print(a.get("noKey","No Key"))

No key 가 출력되는 것을 볼 수 있다.

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

a = {'name' : 'pey', 'phone' : '0119993323'}
print('name' in a)
print('no Key' in a)

각각 true 와 flase 가 리턴됨을 알 수 있다.

0개의 댓글