본문 바로가기

1. Python

1. Python 기초 공부하기(1-7.딕셔너리)


1-7. 딕셔너리

* 딕셔너리의 정의
값의 위치를 나타낼 때 숫자 뿐만 아니라 문자도 사용 가능
(인덱스 : 값의 위치를 나타낼 때 숫자만 사용가능)
br- 시작 단어 : #딕셔너리의 예시 
break bring brush brave   (키.key)
깨지다 가져오다 붓 용감한 (값.value)
데이터와 관련하여 { } (중괄호) 를 사용
(리스트 : 데이터와 관련하여 [ ] (대괄호) 를 사용)
형식 : 딕셔너리명 = {키: 값, 키: 값, ...}


예제) #딕셔너리의 예시
eng = {'break' : '깨지다', 
        'bring' : '가져오다', 
 'brush' : '붓', 
 'brave' : '용감한'}
print(eng)

 



* 딕셔너리의 키와 값


예제) #딕셔너리의 특정한 키의 값을 알고 싶을 때
eng = {'break' : '깨지다', 
        'bring' : '가져오다', 
 'brush' : '붓', 
 'brave' : '용감한'}
print(eng['break'])


예제) # 키는 중복될 수 없으나, 값은 여러개를 넣을 수 있음.
eng = {'break' : ['깨지다','부서지다'],
        'bring' : '가져오다', 
 'brush' : '붓', 
 'brave' : '용감한'}
print(eng['break'])

 



* 데이터의 변경,추가,삭제
형식:딕셔너리명[키]=값


예제) # 값의 변경
eng = {'break' : '깨지다', 
        'bring' : '가져오다', 
 'brush' : '붓', 
 'brave' : '용감한'}
eng['break']='부서지다'
print(eng)


예제) # 키-값 추가하기
eng = {'break' : '깨지다', 
        'bring' : '가져오다', 
 'brush' : '붓', 
 'brave' : '용감한'}
eng['brief'] = '간단한'
print(eng)# 빈 딕셔너리에도 키-값의 추가가 가능


예제) #메뉴에 input()을 이용해 새로운 메뉴를 추가하는 프로그램
menu = {'김밥':'3500원','떡볶이':'4500원','오뎅':'1000원', '순대':'3000원'}
a=input('새로운 메뉴?:')
b=input('새로운 메뉴의 가격?:')
menu[a]=b
print(menu)

 




* 다양한 명령어 사용하기


예제) # keys()를 이용하여 딕셔너리의 키만 꺼내고 싶을 때
menu = {'김밥':'3500원','떡볶이':'4500원','오뎅':'1000원', '순대':'3000원'}
print(menu.keys())


예제) # values()를 이용하여 딕셔너리의 값만 꺼내고 싶을 때
menu = {'김밥':'3500원','떡볶이':'4500원','오뎅':'1000원', '순대':'3000원'}
print(menu.values())


예제) # 추출한 결과값들을 리스트로 바꾸고 싶을 때
# key와 value는 리스트로 바꿀 수 있음.
menu = {'김밥' : '3500원',
    '떡볶이' : '4500원',
    '오뎅' : '1000원', 
    '순대' : '3000원'}
print(list(menu.keys()))


예제) # key-value 한 쌍을 통째로 출력하고 싶을 때
menu = {'김밥' : '3500원',
    '떡볶이' : '4500원',
    '오뎅' : '1000원', 
    '순대' : '3000원'}
print(menu.items())


예제) # 딕셔너리를 정렬하고 싶을 때
menu = {'김밥' : '3500원',
    '떡볶이' : '4500원',
    '오뎅' : '1000원', 
    '순대' : '3000원'}
print(sorted(menu.keys())) # print(sorted(menu)) 로 실행해도 자동으로 key()를 기준으로 정렬
# 기본 오름차순 정렬. 내림차순 정렬이 필요하면, keys()뒤에 reverse=True를 삽입.
# 결과값은 [ ] (대괄호)로 출력되는데, 이는 sorted()로 딕셔너리를 정렬하면 결과가 리스트로 나오기 때문.
# 결과가 리스트이므로 슬라이싱도 가능. (printed(sorted(menu.keys()))[:2]) 이렇게 가능)


예제) # 딕셔너리의 key-value 한 쌍을 통째로 정렬하여 출력하고 싶을 때
menu = {'김밥' : '3500원',
    '떡볶이' : '4500원',
    '오뎅' : '1000원', 
    '순대' : '3000원'}
print(sorted(menu.items()))


예제) #물건의 값이 저렴한 순서대로 정렬하고 싶음
# 값으로 정렬 : operator라는 모듈이 필요 + itmegetter() 사용 필요(기준에 따라 키와 값을 모으는 명령어)
import operator
menu = {'김밥' : 3500,
    '떡볶이' : 4500,
    '오뎅' : 1000, 
    '순대' : 3000}
print(sorted(menu.items(), key=operator.itemgetter(1))) 
#itemgetter 안의 0은 key를 기준, 1은 value를 기준으로 정렬. 값은 value이므로 1을 넣어야 함.
# 비싼 순서 : itemgetter() 뒤에 reverse=True를 삽입.

 



* 조건문으로 딕셔너리 다루기


예제) #input()을 이용하여 입력 후에 딕셔너리(midterm) 내의 학생들의 점수를 출력해보기.
midterm={'도윤':43,
'하윤':82,
'시우':76,
'지유':61,
'주원':94}
student=input('어떤 학생의 점수가 제일 궁금함?')
if student in midterm.keys():
print(midterm[student], '점 입니다.')
else:
print('해당 학생이 없습니다.')

 



* 반복문으로 딕셔너리 다루기


예제) # 딕셔너리(midterm)에서 학생들의 이름을 반복문으로 출력해보기.
midterm={'도윤':43,
'하윤':82,
'시우':76,
'지유':61,
'주원':94}
for k in midterm.keys(): # 점수만 반복문으로 출력하고 싶다면, values()로 바꿔서 입력.
print(k, end=' ')



* 중첩 제어구조로 딕셔너리 다루기


예제) # 점수가 70점 이상인 학생의 이름과 점수를 모두 출력
midterm={'도윤':43,
'하윤':82,
'시우':76,
'지유':61,
'주원':94}
print('점수가 70점 이상인 학생의 이름과 점수를 모두 출력.')
for k, v in midterm.items():
if v >= 70:
print(k, v, end=' ')



* 딕셔너리로 간단한 프로그램 만들기


예제) # 영단어장을 생성 후 빈도수를 기준으로 빈도수가 높은 단어부터 낮은 단어 순으로 정렬.
alibaba = ' in a town of persia lived to brothers, sons of a poor man; one named cassim,
the other alibaba. cassim, the elder...'
vocab = {}
word_list = alibaba.split()
# word_list에 찾는 단어가 있는지 반복해서 확인하는 작업이 필요.
# 첫 단어부터 마지막 단어까지 반복하기
for w in word_list:
if w not in vocab: # 단어가 vocab 딕셔너리의 키에 없으면
vocab[w]=1
else: # 단어가 vocab 딕셔너리의 키에 있으면
vocab[w]+=1
print(vocab)