자료구조의 마지막!
[딕셔너리] 에 대해서 자세히 알아보자!
Key와 Value를 이용해서 자료를 관리한다
[리스트]는 데이터를 줄세우고 번호를 부여(인덱스)한다
⭐[딕셔너리]는 번호(인덱스)가 존재 하지 않아, 직접 key & value를 정해줘
야 한다
[리스트/튜플]은 중복이 가능
⭐[딕셔너리]의 key
는 절.대 중복되면 안됨
⭐key에 immutable한 값만 올 수 있다 = key는 변경이 불가능한 data만 올 수 있다 (리스트는 올 수 없음, 튜플은 변경이 불가능하즘로 올 수 있음)
⭐반면 value는 변경이 가능해 모든 data가 올 수 있다
students = {'s1':'H', 's2':'P', 's3':'K', 's4':['G', 'W']}
print(type(students))
print(students)
▼
<class 'dict'>
{'s1': 'H', 's2': 'P', 's3': 'K', 's4': ['G', 'W']}
key값
])) : students = {'s1':'H', 's2':'P', 's3':'K', 's4':['G', 'W']}
print(students['s1'])
print(students['s4'][0])
print(students['s4'][1])
▼
H
G
W
KeyError: 's5'
get()
은 key가 없어도 에러가 발생하지 않는다students = {'s1':'H', 's2':'P', 's3':'K', 's4':['G', 'W']}
print(students.get('s5'))
▼
None
'딕셔너리 이름[키;key] = 값;value
studentInfo = {}
studentInfo['name'] = input('이름 입력: ')
studentInfo['grade'] = input('학년 입력: ')
studentInfo['mail'] = input('메일 입력: ')
studentInfo['addr'] = input('주소 입력: ')
print(f'studentInfo : {studentInfo}')
▼
이름 입력: Jaam._.mini
학년 입력: 3
메일 입력: jamjam@naver.com
주소 입력: korea
studentInfo : {'name': 'Jaam._.mini', 'grade': '3', 'mail': 'jamjam@naver.com', 'addr': 'korea'}
Q> 0부터 10까지의 각각의 정수에 대한 팩토리얼을 딕셔너리에 추가
if i == 0:
: i 가 0일 때factorialDic[i] = 1
: 0팩토리얼
은 1로 정하자for j in range(1, (i+1)):
: j가 1부터 i까지 반복될 때factorialDic[i] = factorialDic[i-1] * j
: 1 팩토리얼은 0 x 1(자기자신) 이다. 여기서 0팩토리얼
은 1로 위에서 정의 했으니까, 결국 1 x 1로 계산된다 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' 형태로 아이템을 수정한다
date =0
# ▼ 30번 반복 될 수 있게 설정( 문제가 30일 이니까, 30번 반복)
while True:
date += 1
myBodyInfo['몸무게'] = round((myBodyInfo['몸무게'] - 0.3), 2)
print('몸무게: {}'.format(myBodyInfo['몸무게']))
myBodyInfo['신장'] = round((myBodyInfo['신장'] + 0.001), 3)
print('신장: {}'.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.801
(중간 생략)
신장: 1.829
몸무게: 74.0
신장: 1.83
myBodyInfo: {'이름': 'gildong', '몸무게': 74.0, '신장': 1.83}
myBMI: 22.097
memInfo = {'이름':'홍길동', '메일':'hh@naver.com', '학년':'3', '취미':['농구', '게임'] }
ks = memInfo.keys()
print(f'ks : {ks}')
print(f'ks type : {type(ks)}')
vs = memInfo.values()
print(f'vs : {vs}')
print(f'vs type : {type(vs)}')
items = memInfo.items()
print(f'items : {items}')
print(f'items type : {type(items)}')
▼
ks : dict_keys(['이름', '메일', '학년', '취미'])
ks type : <class 'dict_keys'>
vs : dict_values(['홍길동', 'hh@naver.com', '3', ['농구', '게임']])
vs type : <class 'dict_values'>
items : dict_items([('이름', '홍길동'), ('메일', 'hh@naver.com'), ('학년', '3'), ('취미', ['농구', '게임'])])
items type : <class 'dict_items'>
data 형태를 list로 변환해서 사용도 가능
memInfo = {'이름':'홍길동', '메일':'hh@naver.com', '학년':'3', '취미':['농구', '게임'] }
for key in memInfo.keys():
print(f'{key}: {memInfo[key]}')
▼
이름: 홍길동
메일: hh@naver.com
학년: 3
취미: ['농구', '게임']
for key in scores:
scores[key]
if scores[key] < minScore:
scores[key] = fStr
fDic[key] = fStr
scores = {'kor':88, 'eng':55, 'mat':85, 'sci':57, 'his':82}
print(f'scores : {scores}')
minScore = 60
fStr = 'F(재시험)'
fDic = {}
for key in scores:
if scores[key] < minScore:
scores[key] = fStr
fDic[key] = fStr
print(f'scores: {scores}')
print(f'fDic: {fDic}')
▼
scores : {'kor': 88, 'eng': 55, 'mat': 85, 'sci': 57, 'his': 82}
scores: {'kor': 88, 'eng': 'F(재시험)', 'mat': 85, 'sci': 'F(재시험)', 'his': 82}
fDic: {'eng': 'F(재시험)', 'sci': 'F(재시험)'}
[최저]
minScoreKey = ' ' / maxScoreKey = ' '
: key 값을 설정for key in scores.keys():
: 전체(scores.keys())에서 key 하나 씩 뽑기score[key]
: value 값 임if score[key] < minScore:
: 뽑은 value 값이 minScore 보다 작다면minSCore = scores[key]
: minSCore이 scores[key]로 할당 = 계속 반복이 되면 가장 작은 값을 얻어낼 수 있음minScoreKey = key
: key 값도 얻어 냄scores = {'score1' : 8.9, 'score2':8.1, 'score3' : 8.5, 'score4' : 9.8, 'score5' : 8.8}
print('scores : {}'.format(scores))
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))
▼
scores : {'score1': 8.9, 'score2': 8.1, 'score3': 8.5, 'score4': 9.8, 'score5': 8.8}
--------------------------------------------------
minScore : 8.1
minScoreKey : score2
maxScore : 9.8
maxScoreKey : score4
--------------------------------------------------
scores : {'score1': 8.9, 'score3': 8.5, 'score5': 8.8}
key 존재 유무를 파악한다