1 life 2 live
파이썬 기초 프로그래밍(6-2) - 자료구조2 (딕셔너리) [20.7.18] 본문
3. 딕셔너리의 개요
■ Dictionary
º 사전? "단어:설명"의 쌍으로 이루어진 구조
º 파이썬 딕셔너리: "Key:Value"의 쌍으로 이루어진 자료구조

■ 리스트, 세트, 튜플의 구조: "값"들의 모임


■ 딕셔너리의 구조: "구분자(key)"와 "값(value)"의 모임


4. 딕셔너리 선언
■ 선언 기본형
º {‘Key1’ : ‘Value1’, ‘Key2’ : ‘Value2’, …, ‘KeyN’ : ‘ValueN’}
º Key와 Value의 쌍으로 구성됨
■ 선언 방법 2: dict() 메소드 이용
º dict(key-value 쌍의 리스트)
• 예) dict([(‘a’,1), (‘b’,2), (‘c’,3)])
º dict(key=value 형태)
• key가 문자열인 경우 간편하게 활용할 수 있음
• 예) dict(a=1, b=2, c=3)
5. 딕셔너리 속성
■ 유일한 Key 값
º 사전에는 동일한 key 값이 여러 개 존재할 수 없다
º 그러나, 하나의 key에는 여러 개의 값이 존재할 수 있다!
■ Key가 중복된다면?


■ Key에 여러개의 값을 넣으려면?


■ 순서가 없다
º 인덱싱/슬라이싱 불가, 왜?
º 아래와 같은 딕셔너리에 대하여 인덱싱을 시도한다면?

º 어떠한 에러가 발생하는가?

6. 딕셔너리 생성
■ 딕셔너리 생성 예제

º 빈 딕셔너리
º 숫자 키와 값으로 이루어진 딕셔너리
º 문자 키와 값으로 이루어진 딕셔너리
º 숫자 키와 리스트 형태의 값으로 이루어진 딕셔너리
º 등등…
7. 딕셔너리 접근
■ 인덱싱을 통하여 값을 획득
º 인덱싱이 불가능하다고 하지 않았는가?
• 순서에 의한 인덱싱: X
• Key값에 의한 인덱싱: O
º 아래 예제가 정상 동작하는가?


• dict[0]에 접근을 시도한다면? -> Error 발생
8. 딕셔너리 기본 연산
■ 추가
º Key 인덱싱을 활용하여 추가: dict[key] = value 형태
º 예) key = 0, value = ‘zero’인 데이터 추가


■ 삭제
º del 함수를 활용하여 삭제: del dict[key] 형태
º 예) Key가 3인 데이터 삭제


■ 포함 연산자
■ in 연산: x in dict (x: key, dict: 딕셔너리)
º 특정 key x가 딕셔너리 dict에 포함되어 있는지 여부 판별
• 결과: True, key가 딕셔너리에 포함되어 있을 경우
• 결과: False, key가 딕셔너리에 포함되어 있지 않을 경우
■ not in 연산: x not in dict (x: key, dict: 딕셔너리)
º 특정 key x가 딕셔너리 dict에 포함되어 있지 않은지 여부 판별
• 결과: True, key가 딕셔너리에 포함되어 있지 않을 경우
• 결과: False, key가 딕셔너리에 포함되어 있을 경우
■ 포함 연산자 사용 예)

º 결과

9. 딕셔너리 응용 메소드
■ 딕셔너리는 자체적으로 추가 기능들을 보유하고 있음!
º IDE에서 딕셔너리에 .을 찍고 확인해보자!

■ 접근: dict.get(key [, default])
º 딕셔너리 dict로부터 key에 해당하는 값을 반환
º dict[key]와 동일. 단, get() 메소드는 default 값을 설정 가능
• default 값: key 가 딕셔너리에 존재하지 않을 때 반환할 값
• key값이 존재하지 않고 default 값도 주어지지 않을 경우 None이 반환 됨.
■ 접근 예제)


º dict.get(0)을 수행한다면? dict[0]을 수행한다면?


■ 삭제 1: dict.pop(key [, default])
º 딕셔너리로부터 key값을 제거 후 해당 값을 반환
º key값이 존재하지 않는다면 default로 주어진 값을 반환
º key값이 존재하지 않고 default 값도 주어지지 않은 경우 에러 발생
º 예제)


■ 삭제 2: dict.popitem()
º 임의의 요소가 제거되고 해당 값이 반환 됨
■ 삭제 3: dict.clear()
º 모든 요소가 삭제됨
■ 순회 용 데이터 획득
º for 구문 등에서 활용 할 수 있음
º 전체 요소 획득: dict.items()
º 전체 key 값 획득: dict.keys()
º 전체 value 값 획득: dict.values()
º 예제)


10. 실습
■ 실습1) 사용자로부터 문자열 10개를 입력받고 각 문자열이 몇 번 입력되었는지 출력하기 위한 프로그램을 작성하시오.

↓정답
dict={}
for i in range(10):
num = int(input('%d 번째 숫자를 입력해주세요: ' % (i+1)))
if num not in dict:
dict[num]=1
else:
dict[num]+=1
for k, v in dict.items():
print('키값: %d, 갯수: %d' % (k, v))
■ 실습2) 학교 실습실 개조를 하려고 한다. 아래와 같이 추가하고자하는 실습실 번호를 입력하면, 각 층별 개조 실습실 현황을 출력하기 위한 프로그램을 작성하시오.
º 층을 키값으로 세트를 값으로 가지는 딕셔너리 구성

↓정답
dict={}
num = int(input('추가할 실습실 번호를 입력해주세요: (종료:-1)'))
while num >= 0:
level = num // 100
if level not in dict:
dict[level] = {num,}
else:
dict[level].add(num)
num = int(input('추가할 실습실 번호를 입력해주세요: (종료:-1)'))
for k,v in dict.items():
print('%d 층: ' % k, end="")
for vv in v:
print(vv,'호', end=" ")
print()
11. 정리
■ 세트
º 집합 연산을 위한 자료구조
º 중복된 값이 허용되지 않음!
■ 딕셔너리
º Key-Value 쌍으로 구성되는 자료구조
º Key값은 중복이 허용되지 않는다
º 하나의 Key에 여러가지 값(value)가 포함될 수 있음!
'파이썬' 카테고리의 다른 글
| 파이썬 기초 프로그래밍(8-1) - 함수(선언, 인자) [20.7.26] (0) | 2020.07.26 |
|---|---|
| 파이썬 기초 프로그래밍(7) - 자료구조3 (문자열) [20.7.25] (0) | 2020.07.25 |
| 파이썬 기초 프로그래밍(6-1) - 자료구조2 (세트) [20.7.17] (0) | 2020.07.17 |
| 파이썬 기초 프로그래밍(5-3) - 자료구조1 (튜플 및 정리) [20.7.16] (0) | 2020.07.16 |
| 파이썬 기초 프로그래밍(5-2) - 자료구조1 (리스트 및 실습) [20.7.15] (0) | 2020.07.15 |