파이썬 딕셔너리(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
'Python' 카테고리의 다른 글
파이썬 라이브러리 Numpy (Python Library Numpy) (0) | 2023.01.12 |
---|---|
파이썬 함수(Python Function) (0) | 2023.01.10 |
파이썬 반복문(Python Loop) (0) | 2023.01.07 |
파이썬 리스트, 튜플 (Python List, Tuple) (0) | 2023.01.07 |
파이썬 조건문(Python Conditional Statements) (0) | 2023.01.06 |
댓글