본문 바로가기
Python

파이썬 딕셔너리(Python Dictionary)

by wanttosleep1111 2023. 1. 8.

파이썬 딕셔너리(Python Dictionary)

 

1. 딕셔너리 (Dictionary)

단어 그대로 해석하면 사전이라는 뜻

key와 value로 맵핑 되어 있는 순서가 없는 집합

딕셔너리의 타입은 {변할 수 없는  key : 변해도 되는 value}를 한 쌍으로 가진다.

딕셔너리의 기호는 { }로 표현되며, key와 value는 ( : ) 콜론으로 구분 지어준다.

 

# 딕셔너리 생성

dic1 = {'name' : '재석', 'age' : 50, '대표작' : ['무한도전', '런닝맨'] }
dic1

 

# 딕셔너리 타입 확인

print(type(dic1))

 


 

2. 딕셔너리 값 추가 (딕셔너리명[key] = value)

추가할 key가 딕셔너리 내에 없는 key일 경우 추가되며, 이미 key가 있을 경우 딕셔내리 내의 value값을 바꿈

 

#딕셔너리 값 추가

dic1 = {'name' : '재석', 'age' : 50, '대표작' : ['무한도전', '런닝맨'] }
dic1['혈액형'] = 'B'

print(dic1)

 

▶ 예제 : 변수 dic_test에 key 노래제목, value 사건의 지평선을 넣어 딕셔너리를 만들고 딕셔너리에 가수 윤하, 발매일 2022.03.30 값을 추가하기

dic_test = {'노래제목' : '사건의 지평선'}
print(dic_test)

dic_test['가수'] = '윤하'
dic_test['발매일'] = '2022.03.30'
print(dic_test)

 

3. 딕셔너리 값 삭제 (del 키워드)

dic1 = {'name' : '재석', 'age' : 50, '대표작' : ['무한도전', '런닝맨'] }

del dic1['대표작']
print(dic1)

 


 

4. 딕셔너리 값 가져오기

 

① 인덱싱처럼 접근하기, get() 이용하기 

인덱싱처럼 접근하는 경우, 딕셔너리 내 key가 없을 경우 에러가 나온다.

get(key)를 사용하는 경우, 딕셔너리 내 key가 없을 경우 에러가 나오지 않는다.

딕셔너리명.get(key, 없을 경우 반환값)을 이용해 key의 유무를 파악할 수 있다.

# 인덱싱처럼 접근

dic1 = {'name' : '재석', 'age' : 50, '대표작' : ['무한도전', '런닝맨'] }
dic['name']

 

# 딕셔너리명.get(key)

dic1 = {'name' : '재석', 'age' : 50, '대표작' : ['무한도전', '런닝맨'] }
dic1.get('name')

 

# 인덱싱처럼 접근했는데 key가 없을 경우

dic1 = {'name' : '재석', 'age' : 50, '대표작' : ['무한도전', '런닝맨'] }
dic1['혈액형']

 

# get(key)를 이용했는데 key가 없을 경우

dic1 = {'name' : '재석', 'age' : 50, '대표작' : ['무한도전', '런닝맨'] }
dic1.get('혈액형') # 에러 메시지가 출력되지 않음

# key가 없을 경우 속성 값을 주지 않았으면 기본값은 None
temp = dic1.get('혈액형')
print(temp)

# key가 없을 경우 출력해줄 속성 값 주기
dic1.get('혈액형', 'B') # 주의! dic1 딕셔너리 안에 '혈액형' : 'B' 가 추가되는 것이 아님

print(dic1)

 

② key 혹은 value 값을 모두 가져오기

딕셔너리명.keys()

딕셔너리명.values()

dic1 = {'name' : '재석', 'age' : 50, '대표작' : ['무한도전', '런닝맨'] }

# 딕셔너리에서 key만 가져오기
print(dic1.keys())

#딕셔너리에서 value만 가져오기
print(dic1.values())

 

# 리스트 형태로 형변환
# 딕셔너리 key나 value에 순서를 주어서 인덱싱, 슬라이싱으로 관리 가능

dic1 = {'name' : '재석', 'age' : 50, '대표작' : ['무한도전', '런닝맨'] }
lst1 = list(dic1.keys())

print(lst1)

print(lst1[0])
print(lst1[:2])

 

③ for문을 이용하여 key 혹은 value를 하나하나 가져오기

 

dic1 = {'name' : '재석', 'age' : 50, '대표작' : ['무한도전', '런닝맨'] }

# for문을 이용해 key를 하나하나 가져오기
for i in dic1.keys() :
    print(i)

 

dic1 = {'name' : '재석', 'age' : 50, '대표작' : ['무한도전', '런닝맨'] }

# for문을 이용해 value를 하나하나 가져오기
for i in dic1.values() :
    print(i)

 

④ key와 value를 동시에 가져오기 (딕셔너리명.items())

dic1 = {'name' : '재석', 'age' : 50, '대표작' : ['무한도전', '런닝맨'] }

print(dic1.items())

# for문(변수 2개)을 이용하여 key와 value를 같이 가져오기
for key, value in dic1.items() :
    print(key , value)

 

⑤ 딕셔너리에 in 키워드 사용

딕셔너리에 in 키워드는 key에 한해서만 동작 가능

dic1 = {'name' : '재석', 'age' : 50, '대표작' : ['무한도전', '런닝맨'] }

'대표작' in dic1

dic1 = {'name' : '재석', 'age' : 50, '대표작' : ['무한도전', '런닝맨'] }

'재석' in dic1

 


 

5. 딕셔너리 모두 지우기 (clear())

clear()를 이용하면 딕셔너리에 남아있는 데이터를 모두 지우며, 어딘가에 담아놔도 소용없다.

(그냥 딕셔너리명을 새로 선언하는 것과 다름)

dic1 = {'name' : '재석', 'age' : 50, '대표작' : ['무한도전', '런닝맨']}

temp = dic1
dic1.clear()

temp

 

dic1 = {'name' : '재석', 'age' : 50, '대표작' : ['무한도전', '런닝맨']}

temp = dic1
dic1 = {}

temp

 


 

▶ 실습

여러 학생의 점수가 Dictionary로 구성되어 있다. 과목별 합을 구하여 새로운 Dictionary로 구성하기

score_dic = {'홍길동':{'수학':99,'영어':80,'국어':75},
             '김미정':{'영어':67,'국어':87,'수학':55},
             '정수진':{'수학':67,'국어':41,'영어':23}}

 

 

더보기
score_dic = {'홍길동':{'수학':99,'영어':80,'국어':75},
             '김미정':{'영어':67,'국어':87,'수학':55},
             '정수진':{'수학':67,'국어':41,'영어':23}}

# 수학, 영어, 국어 점수를 합할 변수 선언
math = 0
en = 0
kr = 0

# for문과 values()를 이용해 score_dic에서 value를 하나씩 가져오기
for i in score_dic.values() :
    math += i.get('수학') # score_dic value값 딕셔너리 안의 value값을 다시 get()을 이용해 접근 후 
    en += i.get('영어')   # 복합대입연산자를 사용해서 합하기
    kr += i.get('국어')

# for문을 사용하여 마지막 i값에 담겨있는 딕셔너리의 key를 가져와서 과목 리스트 만들기
subject = list(i.keys())

# 과목 리스트 subject와 점수를 합한 변수 math, kr, en을 이용해 새로운 딕셔너리 sum_score 만들기
sum_score = {subject[0]:math, subject[1]:kr, subject[2]:en}

sum_score

댓글