키(key)와 값(value)를 이용해서 자료를 관리한다.
cf) 키는 중복되지 말아야 하지만, 값은 중복 가능함.
'{}'를 이용해서 선언하고, '키:값'의 형태로 아이템을 정의한다.
# 실습
myInfo = {'이름': '박경진',
'전공': 'computer',
'메일': 'jin@naver.com',
'학년': 3,
'주소': '대한민국 서울',
'취미': ['요리', '여행']}
print('myInfo: {}' .format(myInfo))
# print('myInfo: {}' .format(type(myInfo)))
# 결괏값:
myInfo: {'이름': '박경진', '전공': 'computer', '메일': 'jin@naver.com', '학년': 3, '주소': '대한민국 서울', '취미': ['요리', '여행']}
myInfo: <class 'dict'>
딕셔너리는 키(key)를 이용해서 값(value)을 조회한다.
존재하지 않는 키를 이용한 조회 시 에러(error)가 발생한다.
students = {'s1':'홍길동', 's2':'박찬호', 's3':'이용규', 's4':['박세리', '박공주']}
print(students['s1'])
print(students['s2'])
print(students['s3'])
print(students['s4'])
print(students['s4'][0])
print(students['s4'][1])
# 결괏값:
홍길동
박찬호
이용규
['박세리', '박공주']
박세리
박공주
get(key)를 이용해서 값(value)을 조회할 수 있다.
students = {'s1':'홍길동', 's2':'박찬호', 's3':'이용규', 's4':['박세리', '박공주']}
print(students.get('s1'))
print(students.get('s2'))
print(students.get('s3'))
print(students.get('s4'))
print(students.get('444'))
# 결괏값:
홍길동
박찬호
이용규
['박세리', '박공주']
None
나의 정보(이름, 전공, 메일, 주소 등)를 딕셔너리에 저장하고 '[]'와 'get()'함수를 이용해서 조회하고 출력하자.
myInfo = {
'이름': '박경진',
'전공': 'computer',
'메일': 'jin@naver.com',
'학년': 3,
'주소': '대한민국 서울',
'취미': ['요리', '여행']}
print(myInfo)
print(myInfo['이름'])
print(myInfo['메일'])
print(myInfo['취미'])
print(myInfo.get('이름'))
print(myInfo.get('메일'))
print(myInfo.get('취미'))
print(myInfo.get('주소2'))
# 결괏값:
{'이름': '박경진', '전공': 'computer', '메일': 'jin@naver.com', '학년': 3, '주소': '대한민국 서울', '취미': ['요리', '여행']}
박경진
jin@naver.com
['요리', '여행']
박경진
jin@naver.com
['요리', '여행']
None
'딕셔너리이름[키(key)] = 값(value)' 형태로 아이템을 추가한다.
추가하려는 키가 있다면 기존 값이 변경된다.
myInfo = {}
myInfo['이름'] = '박경진'
myInfo['전공'] = 'computer'
myInfo['메일'] = 'jin@gamil.com'
myInfo['학년'] = 3
myInfo['주소'] = 'korea seoul'
myInfo['취미'] = ['수영', '여행']
print(myInfo)
myInfo['메일'] = 'jin@naver.com'
print(myInfo)
#결괏값:
{'이름': '박경진', '전공': 'computer', '메일': 'jin@gamil.com', '학년': 3, '주소': 'korea seoul', '취미': ['수영', '여행']}
{'이름': '박경진', '전공': 'computer', '메일': 'jin@naver.com', '학년': 3, '주소': 'korea seoul', '취미': ['수영', '여행']}
학생 정보(이름, 학년, 메일, 주소)를 입력받아 딕셔너리에 추가해보자.
studentInfo = {}
studentInfo['name'] = input('이름 입력: ')
studentInfo['grade'] = input('학년 입력: ')
studentInfo['mail'] = input('메일 입력: ')
studentInfo['addr'] = input('주소 입력: ')
print(f'studentInfo : {studentInfo}')
# 결괏값:
이름 입력: 홍길동
학년 입력: 2
메일 입력: gildong@gmail.com
주소 입력: korea seoul
studentInfo : {'name': '홍길동', 'grade': '2', 'mail': 'gildong@gmail.com', 'addr': 'korea seoul'}
0부터 10까지의 각각의 정수에 대한 팩토리얼을 딕셔너리에 추가해보자.
factorialDic = {}
for i in range(11):
if i == 0:
factorialDic[i] = 1
else:
for j in range(1, (i+1)):
factorialDic[i] = factorialDic[i-1] * j
print(f'factorialDic : {factorialDic}')
# 결괏값:
factorialDic : {0: 1, 1: 1, 2: 2, 3: 6, 4: 24, 5: 120, 6: 720, 7: 5040, 8: 40320, 9: 362880, 10: 3628800}
'딕셔너리이름[키(key)] = 값(value)' 형태로 아이템을 수정한다.
학생의 시험 점수가 60점 미만이며 'F(재시험)'으로 값을 변경해보지.
scores = {'kor': 88, 'eng': 55, 'mat': 85, 'sci': 57, 'his': 82}
print(f'scores : {scores}')
minScore = 60
fStr = 'F(재시험)'
if scores['kor'] < minScore: scores['kor'] = fStr
if scores['eng'] < minScore: scores['eng'] = fStr
if scores['mat'] < minScore: scores['mat'] = fStr
if scores['sci'] < minScore: scores['sci'] = fStr
if scores['his'] < minScore: scores['his'] = fStr
print(f'scores : {scores}')
# 결괏값:
scores : {'kor': 88, 'eng': 55, 'mat': 85, 'sci': 57, 'his': 82}
scores : {'kor': 88, 'eng': 'F(재시험)', 'mat': 85, 'sci': 'F(재시험)', 'his': 82}
하루에 몸무게(kg)와 신장(cm)이 각각 -0.3kg, +0.001m씩 변한다고 할 때, 30일 후의 몸무게와 신장의 값을 저장하고 BMI 값도 출력하는 프로그램을 만들어보자.
myBodyInfo = {'이름':'gildong', '몸무게':83.0, '신장':1.8}
myBMI = myBodyInfo['몸무게'] / (myBodyInfo['신장'] ** 2)
print(f'myBodyInfo: {myBodyInfo}')
print(f'myBMI: {round(myBMI, 2)}')
date = 0
while True:
date += 1
myBodyInfo['몸무게'] = round((myBodyInfo['몸무게'] - 0.3 ), 2)
print('몸무게 : {}' .format(myBodyInfo['몸무게']))
myBodyInfo['신장'] = round((myBodyInfo['신장'] + 0.001), 3)
print('신장 : {}s'.format(myBodyInfo['신장']))
myBMI = myBodyInfo['몸무게'] / (myBodyInfo['신장'] ** 2)
if date >= 30:
break
print(f'myBodyInfo: {myBodyInfo}')
print(f'myBMI: {round(myBMI, 3)}')
# 결괏값:
myBodyInfo: {'이름': 'gildong', '몸무게': 83.0, '신장': 1.8}
myBMI: 25.62
몸무게 : 82.7
신장 : 1.801s
몸무게 : 82.4
신장 : 1.802s
몸무게 : 82.1
신장 : 1.803s
몸무게 : 81.8
신장 : 1.804s
몸무게 : 81.5
신장 : 1.805s
몸무게 : 81.2
신장 : 1.806s
몸무게 : 80.9
신장 : 1.807s
몸무게 : 80.6
신장 : 1.808s
몸무게 : 80.3
신장 : 1.809s
몸무게 : 80.0
신장 : 1.81s
몸무게 : 79.7
신장 : 1.811s
몸무게 : 79.4
신장 : 1.812s
몸무게 : 79.1
신장 : 1.813s
몸무게 : 78.8
신장 : 1.814s
몸무게 : 78.5
신장 : 1.815s
몸무게 : 78.2
신장 : 1.816s
몸무게 : 77.9
신장 : 1.817s
몸무게 : 77.6
신장 : 1.818s
몸무게 : 77.3
신장 : 1.819s
몸무게 : 77.0
신장 : 1.82s
몸무게 : 76.7
신장 : 1.821s
몸무게 : 76.4
신장 : 1.822s
몸무게 : 76.1
신장 : 1.823s
몸무게 : 75.8
신장 : 1.824s
몸무게 : 75.5
신장 : 1.825s
몸무게 : 75.2
신장 : 1.826s
몸무게 : 74.9
신장 : 1.827s
몸무게 : 74.6
신장 : 1.828s
몸무게 : 74.3
신장 : 1.829s
몸무게 : 74.0
신장 : 1.83s
myBodyInfo: {'이름': 'gildong', '몸무게': 74.0, '신장': 1.83}
myBMI: 22.097
전체 키(key)와 값(value)를 조회할 수 있다.
memInfo = {'이름':'홍길동', '메일':'gildong@gmail.com', '학년':3, '취미':['농구', '게임']}
ks = memInfo.keys()
print(f'ks : {ks}')
print(f'ks type : {type(ks)}')
print(' ')
vs = memInfo.values()
print(f'vs : {vs}')
print(f'vs type : {type(vs)}')
print(' ')
items = memInfo.items()
print(f'items : {items}')
print(f'items type : {type(items)}')
# 결괏값:
ks : dict_keys(['이름', '메일', '학년', '취미'])
ks type : <class 'dict_keys'>
vs : dict_values(['홍길동', 'gildong@gmail.com', 3, ['농구', '게임']])
vs type : <class 'dict_values'>
items : dict_items([('이름', '홍길동'), ('메일', 'gildong@gmail.com'), ('학년', 3), ('취미', ['농구', '게임'])])
items type : <class 'dict_items'>
리스트(list())로 변환하기
memInfo = {'이름':'홍길동', '메일':'gildong@gmail.com', '학년':3, '취미':['농구', '게임']}
ks = memInfo.keys()
ks = list(ks)
print(f'ks : {ks}')
print(f'ks type : {type(ks)}')
print(' ')
vs = memInfo.values()
vs = list(vs)
print(f'vs : {vs}')
print(f'vs type : {type(vs)}')
print(' ')
items = memInfo.items()
items = list(items)
print(f'items : {items}')
print(f'items type : {type(items)}')
# 결괏값:
ks : ['이름', '메일', '학년', '취미']
ks type : <class 'list'>
vs : ['홍길동', 'gildong@gmail.com', 3, ['농구', '게임']]
vs type : <class 'list'>
items : [('이름', '홍길동'), ('메일', 'gildong@gmail.com'), ('학년', 3), ('취미', ['농구', '게임'])]
items type : <class 'list'>
for문을 이용한 조회
memInfo = {'이름':'홍길동', '메일':'gildong@gmail.com', '학년':3, '취미':['농구', '게임']}
for key in memInfo.keys():
print(f'{key}: {memInfo[key]}')
# 결괏값:
이름: 홍길동
메일: gildong@gmail.com
학년: 3
취미: ['농구', '게임']
del과 key를 이용한 item 삭제
memInfo = {'이름':'홍길동',
'메일':'gildong@gmail.com',
'학년':3,
'취미':['농구', '게임']}
print(memInfo)
del memInfo['이름']
print(memInfo)
del memInfo['취미']
print(memInfo)
# 결괏값:
{'이름': '홍길동', '메일': 'gildong@gmail.com', '학년': 3, '취미': ['농구', '게임']}
{'메일': 'gildong@gmail.com', '학년': 3, '취미': ['농구', '게임']}
{'메일': 'gildong@gmail.com', '학년': 3}
pop()와 key를 이용한 item 삭제
memInfo = {'이름':'홍길동',
'메일':'gildong@gmail.com',
'학년':3,
'취미':['농구', '게임']}
print(f'memInfo: {memInfo}')
returnValue = memInfo.pop('이름')
print(f'memInfo: {memInfo}')
print(f'returnValue: {returnValue}')
print(f'returnValue type: {type(returnValue)}')
returnValue = memInfo.pop('취미')
print(f'memInfo: {memInfo}')
print(f'returnValue: {returnValue}')
print(f'returnValue type: {type(returnValue)}')
# 결괏값:
memInfo: {'이름': '홍길동', '메일': 'gildong@gmail.com', '학년': 3, '취미': ['농구', '게임']}
memInfo: {'메일': 'gildong@gmail.com', '학년': 3, '취미': ['농구', '게임']}
returnValue: 홍길동
returnValue type: <class 'str'>
memInfo: {'메일': 'gildong@gmail.com', '학년': 3}
returnValue: ['농구', '게임']
returnValue type: <class 'list'>
딕셔너리에 저장된 점수 중 최저 및 최고 점수를 삭제하는 프로그램을 만들어보자.
scores = {'score1' :8.9, 'score2' :8.1, 'score3' :8.5, 'score4' :9.8, 'score5' :8.8}
minScore = 10; minScoreKey = ''
maxScore = 0; maxScoreKey = ''
for key in scores.keys():
if scores[key] < minScore:
minScore = scores[key]
minScoreKey = key
if scores[key] > maxScore:
maxScore = scores[key]
maxScoreKey = key
print('minScore : {}' .format(minScore))
print('minScoreKey : {}' .format(minScoreKey))
print('maxScore : {}' .format(maxScore))
print('maxScoreKey : {}' .format(maxScoreKey))
del scores[minScoreKey]
del scores[maxScoreKey]
print('scores : {}' .format(scores))
# 결괏값:
minScore : 8.1
minScoreKey : score2
maxScore : 9.8
maxScoreKey : score4
scores : {'score1': 8.9, 'score3': 8.5, 'score5': 8.8}
키(key) 존재 유/무 판단한다.
memInfo = {'이름':'홍길동', '메일':'gildong@gmail.com', '학년':3, '취미':['농구', '게임']}
print('이름' in memInfo)
print('메일' in memInfo)
print('학년' in memInfo)
print('취미' in memInfo)
print(' ')
print('name' not in memInfo)
print('mail' not in memInfo)
print('grade' not in memInfo)
print('hobby' not in memInfo)
# 결괏값:
True
True
True
True
True
True
True
True
딕셔너리 길이(아이템 개수)를 알 수 있다.
memInfo = {'이름':'홍길동', '메일':'gildong@gmail.com', '학년':3, '취미':['농구', '게임']}
print('len(memInfo) : {}' .format(len(memInfo)))
# 결괏값:
len(memInfo) : 4
모든 아이템을 삭제한다.
memInfo = {'이름':'홍길동', '메일':'gildong@gmail.com', '학년':3, '취미':['농구', '게임']}
print('memInfo : {}' .format(memInfo))
memInfo.clear()
print('memInfo : {}' .format(memInfo))
# 결괏값:
memInfo : {'이름': '홍길동', '메일': 'gildong@gmail.com', '학년': 3, '취미': ['농구', '게임']}
memInfo : {}
개인 정보에 '연락처'와 '주민등록번호'가 있다면 삭제하는 코드를 작성해보자.
myInfo = {'이름':'Hong Gildong', '나이':'30', '연락처': '010-1234-5678', '주민등록번호':'840315-1234567', '주소':'대한민국 서울'}
print(myInfo)
deleteItem = ['연락처', '주민등록번호']
for item in deleteItem:
if (item in myInfo):
del myInfo[item]
print(myInfo)
# 결괏값:
{'이름': 'Hong Gildong', '나이': '30', '연락처': '010-1234-5678', '주민등록번호': '840315-1234567', '주소': '대한민국 서울'}
{'이름': 'Hong Gildong', '나이': '30', '주소': '대한민국 서울'}