딕셔너리(Dictionary)
▶ 문법 기호/함수 : {key1 : value1, key2 : value2, key3 : value3 ... } / 함수 : dict()
▶ key로 가질 수 있는 데이터 타입 : 문자, 숫자, 튜플(Tuple)
▶ value로 가질 수 있는 데이터 타입 : 문자, 숫자, 리스트(List), 딕셔너리(Dict) ...
▶ 아이템 = key&value 하나의 쌍
▶ 종류
아이템이 없는 딕셔너리
1차원 딕셔너리
다차원 딕셔너리
▶ 특징
key, value의 차이점
* 인덱스 번호를 가지지 않는다.
1. 생성하기
- 딕셔너리 생성하기
- 문법기호 : {k1:v1, k2:v2 ....}
d1 = {1:10, 2:20, 3:30}
type(d1)
- dict() 를 이용해서 생성할수도 있다
d2 = dict()
d2
- 2차원 자료를 이용해 딕셔너리로 변환 가능
x = [['a', 'b'],
['a1','b1'],
['a2','b2']]
type(x)
- 딕셔너리의 value값에 들어갈 수 있는 자료에는 제약이 없다
{1:[1,2,3], 2:{'a':'b'}}
- key와 value의 차이
- key값에는 중복된 자료가 못 들어가며
- 만약 선언단계에서 중복된 key로 선언시 가장 마지막 하나만 반영된다.
{"name":"홍길동", 'name':'임꺽정', ' name2':'임꺽정'}
2. 인덱싱
인덱싱 문법 기호
일차원 vs 다차원 인덱싱
딕셔너리 내장함수로 인덱싱
- 기존의 인덱싱 방법 : 객체[인덱싱번호]
a = [1, 2, 3]
a[0]
-
문자, 리스트타입 인덱싱과의 차이점 : 기준값이 인덱스번호가 아닌 key값을 사용
d1 = {'a':10, 'b':20, 'c':30}
-
인덱싱 방식 : 없는 key값을 조회하면 에러
d1['c']
-
에러를 씹어야 하는 경우
내장함수 .get()을 사용하면, 없는 키값으로 조회해도 에러가 나지 않는다.
d1.get('bd')
-
딕셔너리는 슬라이싱이 불가능하다
-
슬라이싱 대신 반복문을 사용해야 한다.
d1['a':'c']
<< 연습문제 >>
아래와 같은 다차원 딕셔너리를 만들고 제시한 값을 출력해보세요.
{'a' : [1, 2, 3], 'b' : 100, 'c' : {'key1' : ['파인애플', '포도', '바나나'], 'key2' : (55, 66)}}
- 1) 3 출력하기
- 2) ['파인애플', '포도', '바나나']
- 3) 포도 출력하기
- 4) 55 출력하기
3. 아이템 추가하기
- 인덱싱 방식으로 새로운 아이템 추가
- 메소드 : update()
d1 = {'a':1, 'b':2, 'c':3}
- 새로운 key값(인덱싱)에 value값을 할당하여 아이템 추가
d1['d'] = 4
d1
- 기존에 존재하는 key값에 대해서 value를 할당하면 값이 새롭게 갱신됨
d1['a'] = 10
d1
- 하나 이상의 아이템 (key & value) 추가/수정 : 딕셔너리자료.update()
추가할 아이템 타입 : 딕셔너리를 직접 넣어줘도 되고
딕셔너리로 변환이 가능한 리스트를 넣어줘도 됩니다.
- 'e':10, 'z':40, 'v':100
d1.update({'e':10, 'z':40, 'v':100})
d1
- 리스트로 처리하기
data = [['b',10], ['e',50], ['f',100]]
d1.update(data)
d1
- 딕셔너리로 변환되는 리스트 형식이기 때문에 가능합니다.
dict(data)
- 딕셔너리를 리스트로 돌릴때는 키값만 복원됩니다.
list(d2)