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]
}
리스트 → 딕셔너리로 변환하는 방법
- 중괄호[] → 대괄호{}로 변경
- 데이터 앞에 이름표 추가 (이름표는 일반적으로 문자데이터 사용)
- 이름표와 데이터 사이에 콜론(:) 추가
딕셔너리 → 리스트 변환
- 중괄호 {} →대괄호 {} 변경
- 이름표 삭제
- 콜론(:) 삭제
리스트를 딕셔너리로 변환하는 절차를 거꾸로 하면 된다
데이터를 효율적으로 관리하는 방법
- 불필요한 데이터 개수 줄이기
- 늘어나는 데이터를 관리한 변수의 개수 줄이기
변수의 개수 줄이기 위해서는 리스트 혹은 딕셔너리를 사용하면 된다
- 리스트 : 동일한 성격의 데이터가 많은 경우
- 딕셔너리 : 데이터의 종류가 여러 개인 경우
'파이썬' 카테고리의 다른 글
| 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 |