본문 바로가기

Python 기초 배우기/비전공자도 배우는 파이썬 기초

09. 파이썬 사전(딕셔너리 Dictionary) 자료형

 

#딕셔너리 #Dictionary #Dic #사전 #key #value #대응관계 #연관배열 #해시 #hash

 

파이썬 자료형의 종류
1. 숫자형
2. 문자열 자료형
3. 리스트 자료형
4. 튜플 자료형
5. 딕셔너리 자료형 ◀(이번 장에서 배울 내용)
6. 집합 자료형
7. 불 자료형

 

딕셔너리(Dictionary) 자료형은 일상에서

단어를 찾을 때 쓰는 사전처럼

단어와 그 뜻을 연결해 주는 자료형태입니다.

 

 

 

아래 표를 반복해서 보면서 자료형에 익숙해 지세요~

 

파이썬 자료형 비교(리스트 List / 튜플 Tuple / 딕셔너리 Dic / 집합 Set)

 

 

 

사전(딕셔너리 Dictionary)

이름(key)과 내용(value)를 연결
(순서가 없음, 수정할 수 있음)
사전의 이름 = {key1:Value1, key2:Value2, ...}


 

딕셔너리 자료형은 리스트와 튜플과 다르게

인덱싱과 슬라이싱을 사용할수가 없습니다.

이유는 딕셔너리는 순서를 가지고 있지 않기 때문입니다.

 

그래서 특정 위치의 Value 값을 호출할 때

인덱싱과 슬라이싱 대신

변수[Key값] 라고 입력합니다.

 

※Key값이 숫자라면 인덱싱과 혼동될 수 있으니 유의하세요.

ex) 변수[1] → '1'이라는 키값의 Value 반환


 

변수[Key] = Value
딕셔너리 자료형에서 Value 값 확인하기

 

 

※파이썬에서 순서는 어떤 의미이고 어떻게 세는지

모르신다면 아래 게시글을 참고해주세요.

 

04. 파이썬 인덱싱(Indexing), 슬라이싱(Slicing)

먼저, 문자열 자료형에서는 각 문자마다 번호 순서를 매길 수 있습니다. 각 문자마다의 번호를 인덱스(Index)라고 합니다. ​ 파이썬에서는 순서를 0부터 셉니다. 그리고 끝에서부터 번호를 셀 때

planharry.tistory.com

 

 

 

 

아래 표에 적힌 Key와 Value 값을 사용하여

딕셔너리 자료형의 기본 구조를 알아 보겠습니다.

 

Key Value
이름 김사전
생일 0815
dic1 = {'이름':'김사전','생일':'0815'}

print(dic1)    #dic1이란 변수에 포함된 모든 항목을 호출
print(dic1['이름'])  #dic1에서 '이름'이란 Key 값의 Value를 호출 
print(dic1['생일'])  #dic1에서 '생일'이란 Key 값의 Value를 호출

val1 = '이름'   #Key값을 변수로 지정하면 지정된 변수의 Value를 호출
print(dic1[val1])  #print(dic1['이름']) 과 같은 의미


##### result #####

{'이름': '김사전', '생일': '0815'}
김사전
0815

김사전

 

 

 

딕셔너리 자료형의 다른 사용법도 보겠습니다.

dic1 = {'이름':'김사전','생일':'0815'}

dic1['성별'] = '여자'   #현재 딕셔너리에 없는 Key값을 입력하면 항목이 추가됩니다.
print(dic1)
print(dic1['성별'])

dic1['이름']='김딕션'  #기존 Key에 다른 값을 입력하면 Value값이 변경됩니다.
print(dic1)

del dic1['생일']   #딕셔너리에서 '생일' 항목이 삭제됩니다.
print(dic1)


##### result #####

{'이름': '김사전', '생일': '0815', '성별': '여자'}  #성별이 추가됨
여자

{'이름': '김딕션', '생일': '0815', '성별': '여자'}  #이름이 변경됨
김딕션

{'이름': '김딕션', '성별': '여자'}   #생일이 삭제됨

 

dic2 ={'이름':'이사전','번호':[1,2,3], 111:777} 
#리스트 자료형을 Value로 넣을 수 있습니다. 단, 리스트를 Key로는 사용 못함.

print(dic2['번호'])
print(dic2[111])


##### result #####

[1, 2, 3]
777

 

 

dic3 = {'알파벳':'a', '알파벳':'Z'}  
#Key의 값이 같을 경우 마지막에 입력된 Key의 Value만 저장됩니다.

print(dic3)   #처음 입력된 {'알파벳':'a'} 는 무시된다
print(dic3['알파벳']) 


##### result #####

{'알파벳': 'Z'}
Z

 

 

 

 

딕셔너리 관련 함수

딕셔너리이름 . 함수명령어()


 

딕셔너리 함수는 리스트,튜플 함수와는 다릅니다.

구분해서 암기하면 편할 것 같네요~

 

1) Key 모음 가져오기 (keys)
딕셔너리.keys( )
dic1 = {'이름':'김사전','생일':'0815','address':'Seoul'}
print(dic1.keys())  #딕셔너리에 있는 Key 값만 불러오기


#아래 결과값을 보면 'dict_keys'문구와 Key값이 같이 출력이 되는데
리스트형태로 변형하면 Key값들이 리스트 형태로 출력됩니다. 
a=dic1.keys()
print(list(a))


##### result #####

dict_keys(['이름', '생일', 'address'])

['이름', '생일', 'address']

 

2) Value 모음 가져오기 (values)
딕셔너리.values( )
dic1 = {'이름':'김사전','생일':'0815','address':'Seoul'}
print(dic1.values())  #딕셔너리에 있는 Value 값만 불러오기

print(list(dic1.values()))  #리스트 형태로 호출


##### result #####

dict_values(['김사전', '0815', 'Seoul'])

['김사전', '0815', 'Seoul']

 

 

3) Key, Value 쌍 모음 가져오기 (items)
딕셔너리.items( )
dic1 = {'이름':'김사전','생일':'0815','address':'Seoul'}
print(dic1.items()) #key와 Value 값 모두 불러오기

print(list(dic1.items()))  #리스트 형태로 호출

print(dic1) #전체를 호출하는 것과 items()으로 호출하는 것은 자료형태만 다름


##### result #####

dict_items([('이름', '김사전'), ('생일', '0815'), ('address','Seoul')])
↑ items() 함수를 사용하면 각 항목을 튜플 형태를 가진 리스트로 가져옵니다.

[('이름', '김사전'), ('생일', '0815'), ('address','Seoul')]

{'이름': '김사전', '생일': '0815', 'address':'Seoul'}

 

 

4) Key:Value 쌍 모두 지우기 (clear)
딕셔너리.clear( )
dic1 = {'이름':'김사전','생일':'0815','address':'Seoul'}

dic1.clear()  #딕셔너리 안의 모든 요소가 삭제
print(dic1)


##### result #####

{}  #빈 딕셔너리만 출력됩니다.

 

 

5) Key로 Value 얻기 (get)
딕셔너리.get(Key값)
dic1 = {'이름':'김사전','생일':'0815','address':'Seoul'}

print(dic1['이름'])  #Key값으로 호출 
print(dic1.get('이름')) #get 함수로 호출
#두 가지 방법 모두 동일한 결과가 출력됩니다.
#그런데 get() 함수를 사용하는 이유는 
#값이 없을 때 None 값으로 확인하기 위해서입니다. 
 
print(dic1.get('전화')) 
#Key의 값을 불러오는데 해당하는 Key가 없는 경우 'None'이라고 호출


##### result #####

김사전
김사전
None

 

dic1 = {'이름':'김사전','생일':'0815','address':'Seoul'}

print(dic1['전화'])  #존재하지 않는 Key값을 호출하면 오류 메시지가 뜹니다.


##### result #####

Traceback (most recent call last):
  File "main.py", line 64, in <module>
    print(dic1['전화'])
KeyError: '전화'

 

dic1 = {'이름':'김사전','생일':'0815','address':'Seoul'}

print(dic1.get('전화'))

print(dic1.get('전화','Key 없음'))
#key가 없다고 생각될 때 None이 아닌 특정 값으로 호출하고 싶다면 
#get('key값','디폴트값') 으로 입력 


##### result #####

None
Key 없음

 

 

6) 해당 Key가 딕셔너리 안에 있는지 조사하기 (in)
Key값 in 딕셔너리
dic1 = {'이름':'김사전','생일':'0815','address':'Seoul'}

print('전화' in dic1)  # dic1안에 '전화' Key가 있으면True, 없으면False가 출력
print('이름' in dic1)


##### result #####

False
True