본문 바로가기

programming/python

[ python 친해지기 #6 ] 파이썬 자료형 4탄 (딕셔너리)

[ python 친해지기 #6 ] 파이썬 자료형 4탄 (딕셔너리)

 

안녕하세요. 심심한 코딩쟁이입니다.

 

벌써 파이썬 친해지기 여섯 번째 시간입니다. 오늘은 파이썬의 자료형 딕셔너리에 대해 알아보겠습니다.

 

시작하기에 앞서 파이썬 친해지기만 보다 보면 계속 이론만 보는 것 같아 지루하실 수도 있는데

 

그럴 때 [파이썬 활용하기]를 한번 따라 해 보시면 좋을 것 같아요.

 

파이썬 활용하기도 꾸준하게 새로운 내용을 포스팅하도록 하겠습니다.

 

[ python 활용하기 #1 ] 파이썬 이미지 인식 매크로 (pyautogui)

[ python 활용하기 #2 ] 파이썬 슬랙 봇 만들기 1탄 (코딩 몰라도 가능)

[ python 활용하기 #3 ] 파이썬 슬랙 봇 만들기 2탄 (특정 시간에 메시지 보내기)

[ python 활용하기 #4 ] 파이썬 슬랙 봇 만들기 3탄 (날씨, 데드라인)

 

자 오늘도 천천히 따라와 주세요.

 

python-logo
파이썬 로고


딕셔너리 (사전)

 

파이썬 말고 다른 언어를 공부해 보신 적이 있는 분들은 Hash(해시)라는 개념을 알고 계실 텐데요.

 

해시의 파이썬 버전을 딕셔너리라고 생각하시면 쉽게 이해가 가실 겁니다.

 

처음 접하시는 분들에게는 딕셔널리를 "내가 만든 사전"이라고 말씀드리고 싶습니다.

 

딕셔너리는 Key와 Value 두 가지 요소로 이루어진 자료형입니다.

 

우선 딕셔너리를 만드는 방법부터 살펴보시죠.


딕셔너리 만드는 방법

 

딕셔너리는 { } 중괄호를 사용하고 요소로 Key:Value 쌍을 가지는 자료형입니다.

 

리스트와 튜플의 경우 순서를 중요시하지만

 

딕셔너리는 Key값으로 Value를 구분하기 때문에 순서를 중요하게 생각하지 않습니다.

 

따라서 Key값은 고유해야 한다는 특성을 가집니다.

 

Key값이 겹치게 된다면 어떠한 Value를 원하는 것인지 알 수 없기 때문입니다.

 

# 딕셔너리 만드는 방법
# Key 값에는 문자열, 숫자 사용 가능
# Value 값에는 문자열, 숫자, 리스트 등 사용 가능
dic = {'name':'symxsym',
       'blog':'symxsym.tistory.com',
       'age': 1,
       1004:'천사',
       'friends':['짱구', '철수', '훈이', '유리', '맹구']}
# 내가 만든 사전 dic에서 'name'을 찾는다. 라고 생각하면 이해가 쉽습니다.
print(dic['name'])
# 출력 결과
symxsym

print(dic[1004])
# 출력 결과
천사

print(dic['friends'])
# 출력 결과
['짱구', '철수', '훈이', '유리', '맹구']

딕셔너리 요소 추가

 

# 딕셔너리 요소 추가하기

sym = {'처음':'심', '중간':'심'}
sym['끝'] = '한'

print(sym)
# 출력 결과
{'처음': '심', '중간': '심', '끝': '한'}

sym[42] = '사이'

print(sym)
# 출력 결과
{'처음': '심', '중간': '심', '끝': '한', 42: '사이'}

딕셔너리 요소 삭제

 

# 딕셔너리 요소 삭제하기
sym = {'처음':'심', '중간':'심', '끝':'한'}
del sym['중간'] # '중간'이란 Key를 가진 요소를 sym 딕셔너리에서 삭제

print(sym)
# 출력 결과
{'처음': '심', '끝': '한'}

딕셔너리 Key 리스트 만들기

 

# 딕셔너리의 Key 리스트 만들기

sym = {'이름':'심심한코딩쟁이', '나이':'먹기싫음', '거주지':'지구'}
print(sym.keys())
# 출력 결과
dict_keys(['이름', '나이', '거주지'])

print(type(sym.keys()))
# 출력 결과
<class 'dict_keys'>

# 타입을 출력해보면 list 가 아닌 dict_keys 이다.
# 리스트로 변환하는 방법

key_list = list(sym.keys())
print(key_list)
# 출력 결과
['이름', '나이', '거주지']

print(type(key_list))
# 출력 결과
<class 'list'>

딕셔너리 Value 리스트 만들기

 

# 딕셔너리의 Value 리스트 만들기

sym = {'이름':'심심한코딩쟁이', '나이':'먹기싫음', '거주지':'지구'}
print(sym.values())
# 출력 결과
dict_values(['심심한코딩쟁이', '먹기싫음', '지구'])

print(type(sym.values()))
# 출력 결과
<class 'dict_values'>

# 타입을 출력해보면 list 가 아닌 dict_values 이다.
# 리스트로 변환하는 방법

value_list = list(sym.values())
print(value_list)
# 출력 결과
['심심한코딩쟁이', '먹기싫음', '지구']

print(type(value_list))
# 출력 결과
<class 'list'>

딕셔너리 비우기

 

# 딕셔너리 요소 모두 제거하기

sym = {'이름':'심심한코딩쟁이', '나이':'먹기싫음', '거주지':'지구'}
sym.clear()
print(sym)
# 출력 결과 {}는 빈 딕셔너리를 의미
{}

딕셔너리 (Key, Value) 리스트 만들기

 

예제에 나오는 for에 대한 내용은 추후 업로드할 반복문에 대한 포스팅을 통해 설명해 드리겠습니다.

 

# 딕셔너리 Key, Value 쌍 리스트 만들기

sym = {'이름':'심심한코딩쟁이', '나이':'먹기싫음', '거주지':'지구'}

print(sym.items())
# 출력 결과
dict_items([('이름', '심심한코딩쟁이'), ('나이', '먹기싫음'), ('거주지', '지구')])

print(type(sym.items()))
# 출력 결과
<class 'dict_items'>

# for 문을 이용한 딕셔너리 내용 출력
for k, v in sym.items():
    str = f"{k} : {v}"
    print(str)
# 출력 결과
이름 : 심심한코딩쟁이
나이 : 먹기싫음
거주지 : 지구

딕셔너리에 특정 Key의 존재 유무 알아내기

 

자료형 bool에 대한 설명도 추후 업로드할 예정입니다.

#딕셔너리에 특정 Key 존재 유무
sym = {'이름':'심심한코딩쟁이', '나이':'먹기싫음', '거주지':'지구'}
print('이름' in sym)
# 출력 결과
True

print('재산' in sym)
# 출력 결과
False

# True, False 처럼 O, X의 성질을 가진 자료형 bool
print(type('이름' in sym))
# 출력 결과
<class 'bool'>

딕셔너리에서 특정 Key로 Value 찾기

 

# 딕셔너리에서 특정 Key로 Value 찾기

sym = {'이름':'심심한코딩쟁이', '나이':'먹기싫음', '거주지':'지구'}
print(sym.get('거주지'))
# 출력 결과
지구

print(sym.get('재미'))
# 출력 결과
None # 함수의 반환값이 없을 때 사용됨

print(type(sym.get('재미')))
# 출력 결과
<class 'NoneType'>

# 일치하는 Key가 없는 경우에 반환해줄 값을 직접 설정 가능
print(sym.get('재미','존재하지 않는 Key입니다.'))
# 출력 결과
존재하지 않는 Key입니다.

 

딕셔너리 Key 중복 문제

 

에러는 일어나지 않지만 다른 문제가 발생합니다.

 

# 딕셔너리 Key 중복 문제

sym = {'이름':'심심한코딩', '이름':'삼삼한코딩'}

print(sym)
# 출력 결과
{'이름': '삼삼한코딩'}

# 같은 Key가 있는 경우 나중에 입력된 요소만 남게 된다.
# 덮어 씌워지는 느낌

여기까지 파이썬 친해지기 여섯 번째 시간으로 자료형 딕셔너리에 대해 알아보았습니다.


벌써 여섯 번째라니 시간이 참 빠르네요.

 

열심히 살다 보면 노력의 결실이 맺힐 것이라 믿고 하루하루 초심을 잃지 않으려 노력 중입니다.

 

모두에게 똑같이 흐르는 시간이지만 그것을 어떻게 사용하냐는 본인의 몫이라 생각합니다.

 

건강 잘 챙기시고 다음 포스팅에서 만나요. 감사합니다.

반응형