딕셔너리(Dictionary)

2023. 2. 9. 19:00코딩/파이썬

리스트에서는 배열 형태로 데이터를 저장했다. 리스트는 같은 형태의 여러 데이터를 다루는 데에는 효율적이지만 각각 다른 형태의 데이터를 다루기에는 부족함이 있어 보인다. 예를 들어, 한 사람에 대한 정보를 나타내는 데이터 집합을 만들고자 할 때, 리스트에서는 다음과 같은 방법이 있다.

person1 = ['prOv3rt', 18, '010-xxxx-xxxx', 'Korea']

이름, 나이, 전화번호, 국적 등 다양한 정보를 person1이라는 리스트에 담아서 조회할 땐 person[0], person[1]과 같이 할 수 밖에 없다. 직관적이게 각 정보에 라벨을 달아줄 순 없을까?

이러한 문제를 해결해주는 것이 딕셔너리 자료형이다.


딕셔너리란?

딕셔너리는 대응 관계를 나타내는 자료형이다. (Perl, D언어 및 다른 언어도 연관배열(Associative array, 또는 해시(Hash)라고 부르는 대응관계를 나타내는 자료형을 갖고 있다.) 사전이 한 언어에 다른 언어의 뜻이 대응관계를 이루듯이 딕셔너리 자료형은 key와 value가 쌍으로 이루어진 자료형이다. 리스트와 달리 딕셔너리는 value(값)을 얻을 때 key를 사용한다. 거두절미하고 바로 어떻게 쓰는지 살펴보자.

 

딕셔너리 사용법

           # key1:val1      key2:val2   key3:val3                  key4:val4
person = {'name':'prOv3rt', 'age':18,'pnum':'010-xxxx-xxxx','nationality':'Korea'}

중괄호 안에 key와 value를 콜론(:)으로 묶고 각 쌍을 쉼표로 구분한다.

이 때, key에는 변하지 않는 값을 넣어야 하고, value에는 변하지 않는 값과 변하는 값 모두를 넣을 수 있다.

딕셔너리 person을 표로 나타내면 다음과 같다.

key value
name prOv3rt
age 18
pnum 010-xxxx-xxxx
nationality Korea

이렇게 만들어진 딕셔너리의 정보는 다음과 같이 조회할 수 있다.

# 딕셔너리이름[key]
person['name'], person['age'], person['pnum'], person['nationality']

# get함수 - 딕셔너리이름.get(key)
person.get('name')

해당 정보가 몇번째 인덱스에 있는지 기억하지 않아도 직관적으로 key를 통해 value를 조회할 수 있는 것이 딕셔너리의 장점이다.

다음은 여러가지 형태의 데이터로 구성된 딕셔너리의 예다.

#1. key가 정수인 경우
a = {1 : '시작', 2 : '종료'}

#2. value가 리스트(튜플도 가능)인 경우
a = {'student' : ['amy','haley','jack']

#3. key가 튜플인 경우
a = {('samsung','phone'):['s21','note10'],('apple','phone'):['iphone_xr','iphone13'}

예제 1에서 '시작' value를 얻을 때 쓰는 a[1]은 리스트처럼 첫번째 인덱스 값을 나타내는게 아님을 기억하자.
예제 2번에서 리스트의 특정 값을 조회하고 싶다면, a['student'][값 인덱스] 를 하면 된다.

예제 3에서 리스트는 key가 될 수 없음에 유의해야 한다.

리스트는 값을 수정할 수 있지만 튜플은 한번 값을 넣으면 수정할 수 없기 때문이다.

리스트가 key일 때 에러가 발생한다.


딕셔너리 쌍 추가, 삭제

쌍 추가

a = {1:'one'}
a[2] = 'two'

key는 2, value는 two인 쌍이 추가되었다.

com = {'vendor':'samsung'}
com['tunning'] = '3rsys'

key는 tuning, value는 3rsys인 쌍이 추가되었다.

 

쌍 삭제

del com['vendor']

 


딕셔너리 관련 함수들

딕셔너리 관련 함수 목록

clear( ) - 모든 key : value 쌍 지우기

 

items( ) - key : value 쌍 얻기

key : value쌍을 튜플로 묶어 dict_items 객체로 반환한다.

 

get(key) - key로 value 얻기

기존의 방법과 다른 점은 존재하지 않는 key로 value를 얻으려고 할 때 기존의 방법은 오류를 발생시키지만 get( )함수는 None을 반환하는 것이다.

 

keys( ), values( ) - key, value로 이루어진 객체 반환

[python 2.x와 python 3.0이후에서 keys( ), values( ) 함수 차이]
python 2.7까지는 반환값이 리스트였지만 3.0이후부터는 메모리 낭비를 줄이기 위해 dict_keys, dict_values객체로 반환한다. 리스트형태로 받고싶다면 list( )함수를 이용하면 된다.
다만, 굳이 리스트로 변환하지 않아도 해당 객체들은 기본적인 반복문을 이용할 수 있다.

 

copy( ) - 딕셔너리 복사

 

fromkeys(keys, value) - 같은 value를 가진 여러 key : value쌍 생성

key에 문자열을 입력할 수도 있다.

참고로 keys 인자에 바로 문자열을 전달하면 이렇게 된다.(정수는 전달 수 없다.)

 

update( ) - 딕셔너리 값 수정

update( )함수는 딕셔너리 값을 한꺼번에 수정할 때 유용하다.

a = {1:'samsung', 2: 'asus', 3:'lg'}
b = {1:'dell'}
c = {4:'me'}

key1과 key2의 value가 한꺼번에 수정된 것을 볼 수 있다.

딕셔너리 b에는 a와 같은 key값이 있었다. 이 경우, 인자로 전달된 딕셔너리의 value로 수정되어 병합된다.

딕셔너리 c처럼 key값이 다른 경우 이렇게 병합된다.

 

in - 딕셔너리에서 특정 key값 존재유무 확인

# key이름 in 딕셔너리 이름
2 in a
10 in a

key가 딕셔너리에 존재하면 True, 그렇지 않으면 False를 반환한다.

'코딩 > 파이썬' 카테고리의 다른 글

파이썬 자동화 라이브러리  (0) 2023.02.09
파이썬 데이터프레임(Dataframe)  (0) 2023.02.09
리스트(List)  (0) 2023.02.09
모듈(Module)  (0) 2023.02.09
사용차 입출력  (0) 2023.02.09