06. 딕셔너리 자료형

2020. 12. 27. 05:11파이썬

딕셔너리란??

  • 연관배열 (Association array) = 해시 (Hash)

 

  • 딕셔너리는 프로그래밍 언어에 따라 오브젝트, 해시 등 다양한 이름으로 불리고 기능 또한 조금씩 다르다
  • 딕셔너리를 만드는 방법은 언어마다 다를 수 있지만, 데이터에 이름표를 붙여서 관리한다는 측면에서 모두 같다

 

  • 배열이란, 같은 타입의 변수들로 이루어진 유한집합을 말하는데 쉽게 말해서 여러 개의 데이터를 하나의 데이터 세트로 만들어서 관리할 수 있는 리스트를 말한다
  • 배열의 파이썬 버전을 리스트라고 할 수 있는데, 언어별로 방법이 조금씩 다르다
  • 일반적인 배열은 같은 종류의 데이터만 하나의 세트로 관리할 수 있지만 (문자데이터끼리, 숫자데이터끼리 등)
  • 파이썬 리스트는 어떤 종류의 데이터던 상관없이 하나의 리스트로 관리할 수 있다.

 

  • 요즘 사용하는 대부분의 언어에서 ('이름' = '홍길동', '생일' = '몇 월 며칠') 같은 대응 관계를 나타내는 자료형
  • 파이썬에서는 이러한 자료형을 디셔너리이라고 한다.
  • 사전이라는 사전적의미가 있고, Key Value 를 한 쌍으로 가지는 자료형이다.

 

  • 리스트나 튜플처럼 순차적으로 해당 요솟값을 구하지 않고,
  • Key 를 통해서 Value 를 얻는 것이 가장 큰 특징이다.
  • baseball 이라는 단어의 뜻을 찾기 위해 사전의 내용을 순차적으로 모두 검색하는 것이 아니라,
  • baseball 이라는 단어가 있는 곳만 펼쳐서 보는 것이다.

딕셔너리의 형태

  • Key Value 의 쌍 여러 개가 {} 로 둘러싸여 있다.
  • 각각의 요소는 Key : Value 의 형태로 이루어져 있고 쉼표 (,) 로 구분되어있다.
  • 딕셔너리에서 꺼낸 각각의 데이터를 요소라고 하고, 이때 이름표를 키(key), 데이터를 값(value)라고 한다
  • 딕셔너리의 데이터는 키와 값으로 구성되었다는 의미로 키-값 쌍이라고 부르기도 한다 
dic = {'name':'pey', 'phone':'0119993323', 'birth':'1118'}

딕셔너리 쌍 추가 및 삭제

추가

dic[key] = value
a = {1: 'a'}

# {2:'b'} 쌍을 추가한 것으로, a = {1: 'a', 2:'b'}
a[2] = 'b'       

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

삭제

del dic[key]
a = {1: 'a', 2:'b', 3:[1,2,3]}
del a[2]         # a = {1: 'a', 3:[1,2,3]}

딕셔너리 안의 모든 요소 삭제

dic.clear()
a.clear()    # a = {}

딕셔너리 key 를 통해서 Value 얻기

dic[key]
  • 리스트나 튜플, 문자열은 요솟값을 얻고자 할 때 인덱싱이나 슬라이싱 기법을 이용했지만,
  • 딕셔너리는 key 를 통해서 value 를 구하는 방법만이 존재한다.
dic.get(key)
  • dic 이라는 딕셔너리에서 Key 에 대응하는 Value 를 돌려준다.
  • dic[key] dic.get(key) 같은 결과값을 돌려받는다.
  • dic[key]는 존재하지 않는 Key 로 가져오려고 하면 키 오류를 발생시키지만,
  • dic.get(key)는 존재하지 않는 Key 로 가져오려고 하면 None (거짓이라고만 알아두자) 을 돌려준다.
  • 만약 Key 값이 없을 경우 미리 정해 둔 디폴트 값을 대신 가져오게 할 수 있다.
dic.get(key, '디폴트값')
# 예시
a = {1: 'a', 2:'b', 3:[1,2,3]}

a[1]                 # 결과값 'a'

a.get(1)             # 결과값 'a'

a[4]                 # Key 오류

a.get(4)             # 결과값 None = None 을 리턴한다고도 표현한다.

a.get(4,'없음')       # 결과값 '없음'

딕셔너리 주의사항

1. 중복되는 key 값 금지

  • 딕셔너리에서 Key 는 고유한 값이라서 중복되는 Key 값을 설정해 놓으면 하나를 제외한 나머지 것들이 모두 무시된다
  • 보통 마지막에 나오는 Key & Value 요소만 나온다
  • 동일한 Key 가 존재하면 어떤 Key 에 해당하는 Value 를 불러야 할지 알 수 없다.
a = {1:'a', 1:'b'}
print(a)     # {1:'b'}

2. Key 에는 리스트 자료형을 사용할 수 없다.

  • 튜플은 사용가능하다
  • 딕셔너리의 Key 로 쓸 수 있는지의 여부는 Key 가 변하는 값인지 아닌지에 달려있기 때문에
    값이 변할 수 있는 리스트는 사용할 수 없다.
a = {[1,2] :'hi'}    # 형 오류 발생

3. 딕셔너리의 데이터 이름표 (key값)

  • 이름표는 문자 데이터로 사용하므로 공백을 사용할 수는 있으나, 추천하지 않음
  • 코드에서 key값을 사용할 때 공백을 추가로 입력하거나, 빠뜨리는 실수를 하기 쉽기 때문이다.
  • 그래서 공백이 필요한 경우에는 변수 네이밍 컨벤션처럼 밑줄(_)을 사용하거나 각 단어의 첫글자를 대문자로 사용하면 된다
6월_판매량

7월_판매량

딕셔너리 관련 함수

1. Key 리스트 만들기

dic.keys()
  • dic 라는 딕셔너리의 Key 만을 모아서 dict_keys의 객체를 돌려준다.
a = {'name':'pey', 'phone':'0119993323', 'birth':'1118'}
a.keys()     # dict_keys(['name', 'phone', 'birth']) 

 

  • 파이썬 2.7 버전까지는 dic.keys() 함수를 호출하면 반환 값으로 dict_keys 가 아닌 리스트로 돌려줬다.
  • 리스트를 돌려주기 위해서는 메모리 낭비가 발생해서 파이썬 3.0 이후 버전에서는 이러한 메모리 낭비를 줄이기 위해 dict_keys 객체를 반환한다.
  • 만약 파이썬 3.0 이후 버전에서 반환 값으로 리스트가 필요하면 아래의 같은 함수를 사용하면 된다.
list(a.keys())

2. Value 리스트 만들기

dic.values()
a = {'name':'pey', 'phone':'0119993323', 'birth':'1118'}
a.values()    # 반환 값 : dict_values(['pey', '0119993323', '1118'])  

3. Key, Value 쌍 얻기

dic.items()
a = {'name':'pey', 'phone':'0119993323', 'birth':'1118'}
a.items()    # dict_items([('name','pey'), ('phone','0119993323'), ('birth','1118')])

딕셔너리 관련 함수의 반환값

dict_keys(), dict_values(), dict_items()
  • 리스트로 변환되지 않더라도 기본적인 반복구문을 실행할 수 있다.
  • ) for , while
  • 리스트를 사용하는 것과 위처럼 차이는 없지만, 리스트 고유의 함수는 수행할 수 없다.
append(), insert(), pop(), remove(), sort()
for k in a.keys():
    print(k)   # print(k)를 입력할 때 들여쓰기를 하지 않으면 오류가 난다.


# 반복문 for 문의 반환 값
name
phone
birth

해당 Key dic 라는 딕셔너리 안에 있는지 조사하기

key in dic
a = {'name':'pey', 'phone':'0119993323', 'birth':'1118'}

'name' in a      # 반환값 True : 딕셔너리 안에 있으면 참

'email' in a     # 반환값 False : 딕셔너리 안에 없으면 거짓

예제1. 리스트로 연간 판매량 표현하기

yo_qty_2020 = [
    [1,2,3,4],
    [5,6,7,8],
    [9,10,11,12],
    [13,14,15,16],
    [17,18,19,20],
    [21,22,23,24],
    [25,26,27,28],
    [29,30,31,32],
    [33,34,35,36],
    [37,38,39,40],
    [41,42,43,44],
    [45,46,47,48]
]

예제2 데이터에 이름표 추가해서 딕셔너리 만들기

yo_qty_2020 = {
    "1월": [1, 2, 3, 4],
    "2월": [5, 6, 7, 8],
    "3월": [9, 10, 11, 12],
    "4월": [13, 14, 15, 16],
    "5월": [17, 18, 19, 20],
    "6월": [21, 22, 23, 24],
    "7월": [25, 26, 27, 28],
    "8월": [29, 30, 31, 32],
    "9월": [33, 34, 35, 36],
    "10월": [37, 38, 39, 40],
    "11월": [41, 42, 43, 44],
    "12월": [45, 46, 47, 48]
}

리스트 → 딕셔너리로 변환하는 방법

  1. 중괄호[] 대괄호{}로 변경
  2. 데이터 앞에 이름표 추가 (이름표는 일반적으로 문자데이터 사용)
  3. 이름표와 데이터 사이에 콜론(:) 추가

딕셔너리 리스트 변환

  1. 중괄호 {} →대괄호 {} 변경
  2. 이름표 삭제
  3. 콜론(:) 삭제

리스트를 딕셔너리로 변환하는 절차를 거꾸로 하면 된다

데이터를 효율적으로 관리하는 방법

  • 불필요한 데이터 개수 줄이기
  • 늘어나는 데이터를 관리한 변수의 개수 줄이기

변수의 개수 줄이기 위해서는 리스트 혹은 딕셔너리를 사용하면 된다

  • 리스트 : 동일한 성격의 데이터가 많은 경우
  • 딕셔너리 : 데이터의 종류가 여러 개인 경우

 

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

08. 불 자료형-내용입력  (0) 2020.12.27
07. 집합 자료형  (0) 2020.12.27
05. 튜플 자료형  (0) 2020.12.27
04. 리스트 자료형  (0) 2020.12.27
03. 문자형 (문자열) 자료형  (0) 2020.12.27