1 life 2 live

파이썬 기초 프로그래밍(6-2) - 자료구조2 (딕셔너리) [20.7.18] 본문

파이썬

파이썬 기초 프로그래밍(6-2) - 자료구조2 (딕셔너리) [20.7.18]

대희투 2020. 7. 18. 20:40

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)가 포함될 수 있음!

728x90
반응형
Comments