본문 바로가기

Python

딕셔너리 { Dictionary, dict }

728x90
반응형

딕셔너리란?

Key와 Value를 한 쌍으로 갖는 자료형이다. 

Key와 Value의 쌍 여러 개가 { }로 둘러싸여 있다.
각각의 요소는 Key : Value 형태로 이루어져 있고 쉼표(,)로 구분되어 있다.

딕셔너리 = {키1: 값1, 키2: 값2}

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

파이썬은 영리하게도 이러한 대응 관계를 나타낼 수 있는 자료형을 가지고 있다.
요즘 사용하는 대부분의 언어도 이러한 대응 관계를 나타내는 자료형을 갖고 있는데,
이를 연관 배열(Associative array) 또는 해시(Hash)라고 한다.

파이썬에서는 이러한 자료형을 딕셔너리(Dictionary)라고 하는데, 단어 그대로 해석하면 사전이라는 뜻이다.

 

dict로 딕셔너리 만들기


dict는 다음과 같이 키와 값을 연결하거나,
리스트, 튜플, 딕셔너리딕셔너리를 만들 때 사용


딕셔너리 = dict(키1=값1, 키2=값2)

딕셔너리 = dict(zip([키1, 키2], [값1, 값2]))

딕셔너리 = dict([(키1, 값1), (키2, 값2)])

딕셔너리 = dict({키1: 값1, 키2: 값2})

 

{ 'Key' : 'Value' }

리스트튜플처럼 순차적으로(sequential) 해당 요솟값을 구하지 않고 Key를 통해 Value를 얻는다.

이것이 바로 딕셔너리의 가장 큰 특징이다. 'Korea' 이라는 단어의 뜻을 찾기 위해 사전의 내용을 순차적으로 모두 검색하는 것이 아니라 'Korea' 이라는 단어가 있는 곳만 펼쳐 보는 것이다.

 

Key : Value 추가하기 

{1: 'a'} 딕셔너리에 a[2] = 'b'와 같이 입력하면
딕셔너리 a에 Key와 Value가 각각 2와 'b'인 2 : 'b'라는 딕셔너리 쌍이 추가된다.


동일 한 key 가 2개가 존재 할 수 없다

아래와 같은 경우 Kyoto 로 update 되서 출력이 됨
즉, dictionary에 키와 값을 저장할 때 키가 중복되면 가장 뒤에 있는 값만 사용

※ Japan : Tokyo 는 사라짐

update() 함수

a 의 dict 를 b 의 dict 로 update 하게 된다 
즉, 중복되지 않는 b , c , d , e 는 그대로 출력이 되는 것을 확인 할 수 있는데
중복이 되는 a 는 a.update(b) 의 함수에 의해 a{} 를 Overwrite 된다

그러므로 결과 값의 { 'a' : 2 }가 된다

Key 삭제

pop 함수

del 함수

" a = { } " 를 출력해보았다
del () 함수로 지워도 되지만 한번에 다 지워버려야 할 경우도 있다
그때 필요한 함수 clear()

clear( ) , 빈 딕셔너리 { }

print(a) 로 ' a = { } ' 의 Key 와 Value 를 출력
a.clear() 함수를 이용하여 내용을 모두 초기화 하였고
다시 print(a) 를 통하여 ' a = { } ' 의 Key 와 Value 를 출력하였다

' { } ' 라는 빈 Dictionary

 

빈 딕셔너리 만들기

빈 딕셔너리를 만들 때는 { }만 지정하거나 dict를 사용하면 됩니다.
보통은 { }를 주로 사용합니다.

딕셔너리 = {}

딕셔너리 = dict()


in

' b ' 라는 Key 가 Dict ' a = { } ' 에 들어있는지 확인할때 사용된다

' b ' 라는 Key 가 a dict 에 있으므로 " 'b' in a " 는 True 가 된다.

' d ' 라는 Key 가 a dict 에 없으므로 " 'd' in a " 는 False 가 된다.

 

다음은 List 와 Dictionary 의 성능을 비교 해보자
dict ' a = { } ' 와 list ' b = [ ] ' 가 있다

print ( 100 in b ) 는 list b 안에 100 이라는 요소가 있는지 확인해서 출력하라는 코드 이다
print ( ' b ' in a ) 는 dict a 안에 ' b ' 라는 Key 가 있는지 확인해서 출력하라는 코드 이다

무슨 차이가 있을까?

list 같은 경우는 b = [ ] 안에서 1 , 2 , 3 , 4 , 5 , 6 , 7 , 9 , 10.. 100 까지
하나 하나순차적으로 확인을 하며 넘어간다 
dict 같은 경우에는 a = { } 안에서 ' a ' 의 Key 값을 거치지 않고 ' b ' 라는 Key 값으로 바로 도달 한다 

만약 검증해야 될 요소가 1억 ~ 10억 또는 미지수 일때를 생각해보자
list 와 dict 의 성능 차이를.

 

value access

 

get ()

dict[Key] 로 접근, 키가 없는 경우 에러 발생
.get( ) 함수로 접근, 키가 없는 경우 None 반환

get(x) 함수는 x라는 Key에 대응되는 Value를 돌려준다. 
아래와 같이 a.get( )은 a[ ]을 사용했을 때와 동일한 결과 값을 돌려받는다.

다만  a[ ]처럼 존재하지 않는 키()로 값을 가져오려고 할 경우 a[ ]는 Key 오류를 발생시키고
a.get( )는 오류를 발생 시키지 않고 None을 돌려준다는 차이가 있다.

key 가 dict 에 있는 경우

key 가 dict 에 없는 경우

get ()

key 가 dict 에 있는 경우

key 가 dict 에 없는 경우
아무것도 출력이 되지 않는다

print 로 출력을 확인해보자
' None ' 출력된 것을 확인 할 수 있다

key 값이 없는 경우 프로그램이 죽지 않고 실행할 수 있게 자주 사용됨

 

프로그램이 죽는 다는 건 이런 것...
( 아래 그림 참조 )

모든 keys , values 접근

keys ( ) - key 만 반환
values ( ) - 값만 반환

keys 값과 values 값을 따로 출력 할 수 있다

 

list(a.keys())
list(a.values())
위 함수를 통해 dict 를 list 변환하여 사용할수 있다

items ( ) - 키, 값의 튜플을 반환
key , value 를 tuple 로 반환시킨다

 함수는 Key와 Value의 쌍을 튜플로 묶은 값을 dict_items 객체로 돌려준다.
dict_values 객체와 dict_items 객체 역시 dict_keys
객체와 마찬가지로 리스트를 사용하는 것과 동일하게 사용할 수 있다.

 

딕셔너리 키의 자료형

딕셔너리의 키는 문자열뿐만 아니라 정수, 실수, 불도 사용할 수 있으며 자료형을 섞어서 사용해도 됩니다.
그리고 값에는 리스트, 딕셔너리 등을 포함하여 모든 자료형을 사용할 수 있습니다.

단, 키에는 리스트와 딕셔너리를 사용할 수 없습니다.

728x90
반응형

'Python' 카테고리의 다른 글

csv 파이썬  (0) 2020.06.16
문자열의 함수  (0) 2020.06.15
자료형  (0) 2020.06.15
리스트 [ List ]  (0) 2020.06.15
str() , int()  (0) 2020.06.12