1) Hash 자료형 정리
파이썬에서는 Dictionary 라는 자료구조를 통해 해시를 제공합니다. 그리고 Dictionary는 dict 클래스에 구현되어있습니다.
해시 자료형은 다음과 같은 상황에서 사용할 수 있습니다.
- 리스트를 쓸 수 없을 때 (인덱스 값을 숫자가 아닌 다른 값 문자열이나 튜플을 사용하려고 할 때)
- 빠른 접근 / 탐색이 필요할 때 ⭐️
- 집계가 필요할 때(해시와, collections 모듈의 Counter 클래스를 사용)
2) 딕셔너리와 리스트의 시간 복잡도 차이
List에 비해 Dictionary가 매우 빠른 시간복잡도를 갖는 것을 보실 수 있습니다. 즉 , 원소를 넣거나 삭제, 탐색할 일이 많을 때에는 딕셔너리를 사용하는 것이 좋습니다.
3) 딕셔너리 사용법
3-1) 선언
# 빈딕셔너리 생성
dict1 = {} # {}
dict2 = dict() # {}
# 특정 key-value쌍을 가진 dictionary 선언
Dog = {
'name': '동동이',
'weight': 4,
'height': 100,
}
'''
{'height': 100, 'name': '동동이', 'weight': 4}
'''
{}를 사용하거나 dict함수 호출 시 빈 딕셔너리를 선언할 수 있습니다. key - value 쌍을 갖는 dictionary 선언도 바로 가능합니다
3-2) value 값 가져오기(Get)
# [] 기호 사용해 원소 가져오기
dict = {'하이': 300, '헬로': 180, 3: 5}
dict['헬로'] # 180
Dictionary에서 원소를 가져오는 방법은 두 가지 입니다.
- [] 사용하기
- get 메소드 이용하기
# get 메소드를 아용해 원소 가져오기 1
# 딕셔너리에 해당 key가 없을때 Key Error 를 내는 대신, 특정한 값을 가져온다.
dict = {'하이': 300, '헬로': 180}
dict.get('동동', 0) # 0
# get 메소드를 아용해 원소 가져오기 2
# 물론, 딕셔너리에 해당 key가 있는 경우 대응하는 value를 가져온다.
dict = {'하이': 300, '헬로': 180}
dict.get('헬로', 0) # 180
get 메소드는 get(key,x) 로 사용하실 수 있습니다. 이는 '딕셔너리에 key가 없는 경우, x를 리턴해줘라'라는 용도입니다.
👉🏻 []를 사용하면 찾고자하는 key 값이 없을 경우 바로 KeyError 를 발생시키지만 get() 메소드를 사용하면 존재하지 않은 key 에 대해 예외를 던지지 않고 none 을 리턴하기 때문에 에러를 피할 수 있다. ⭐️⭐️⭐️
3-3) 값 저장 및 업데이트(Set)
# 값 집어넣기
dict = {'김철수': 300, 'Anna': 180}
dict['홍길동'] = 100
dict #{'Anna': 180, '김철수': 300, '홍길동': 100}
# 값 수정하기1
dict = {'김철수': 300, 'Anna': 180}
dict['김철수'] = 500
dict # {'Anna': 180, '김철수': 500}
# 값 수정하기2
dict = {'김철수': 300, 'Anna': 180}
dict['김철수'] += 500
dict # {'Anna': 180, '김철수': 800}
딕셔너리에 값을 집어넣거나, 값을 업데이트 할 때 [ ] 를 사용합니다.
3-4) 값 삭제(Delete)
# del 이용하기 - 키가 있는 경우
dict = {'김철수': 300, 'Anna': 180}
del dict['김철수']
dict #{'Anna': 180}
# del 이용하기 - 키가 없는 경우 raise KeyError
my_dict = {'김철수': 300, 'Anna': 180}
del my_dict['홍길동']
'''
keyError 발생!
'''
# pop 이용하기 - 키가 있는 경우 대응하는 value 리턴
my_dict = {'김철수': 300, 'Anna': 180}
my_dict.pop('김철수', 180) # 300
# pop 이용하기 - 키가 없는 경우 대응하는 default 리턴
my_dict = {'김철수': 300, 'Anna': 180}
my_dict.pop('홍길동', 180) # 180
딕셔너리에서 특정 key 값을 지울 때에 다음과 같은 방법을 사용할 수 있습니다.
- del dict_obj[key] : del은 키워드로써, 만약 딕셔너리에 key가 없다면 keyError가 발생합니다.
- pop(key[,default]) : pop은 메소드로써, pop메소드는 key 값에 해당하는 value를 리턴합니다. key가 없다면 두번째 파라미터인 default를 리턴합니다.(만약 default 설정하지 않았을 시엔 keyError가 발생합니다.)
3-5) 순회(Iterate)
# key로만 순회
dict = {'김철수': 300, 'Anna': 180}
for key in dict:
print(key)
# 이 경우 value를 찾고 싶으면 dict[key] 와 같이 접근을 따로 해주어야.
'''
김철수
Anna
'''
# key-value 동시 순회
dict = {'김철수': 300, 'Anna': 180}
for key, value in dict.items():
print(key, value)
'''
김철수 300
Anna 180
'''
딕셔너리를 for문을 이용하여 조회할 때 두가지 방법이 존재합니다.
- key로만 순회하기
- key, value 동시 순회하기 (items() 사용)
그 외 딕셔너리 Tip
1) 특정 key가 딕셔너리에 있는지 없는지 조회할 때 - in 사용하기
dict = {'김철수': 300, 'Anna': 180}
print("김철수" in dict) #True
print("김철수" not in dict) # False
2) key 또는 value만 뽑아내는 방법
# key를 extract - keys 사용
my_dict = {'김철수': 300, 'Anna': 180}
my_dict.keys() # dict_keys(['김철수', 'Anna'])
# value를 extract - values 사용
my_dict = {'김철수': 300, 'Anna': 180}
my_dict.values() # dict_values([300, 180])
# key, value 쌍을 extract - items 사용
my_dict = {'김철수': 300, 'Anna': 180}
my_dict.items() # dict_items([('김철수', 300), ('Anna', 180)])
참고 : https://yunaaaas.tistory.com/m/46
'Programming 💻 > Python' 카테고리의 다른 글
[Python] 아스키코드(Ascii Code) 관련 함수 ord / chr (0) | 2024.01.05 |
---|---|
[Python] collections 모듈의 Counter 사용법 (1) | 2023.10.07 |
[Python] deque의 정의, 함수, 활용 정리 (0) | 2023.10.05 |
[Python] 전역변수, 지역변수 / global, nonlocal 총정리 (0) | 2023.09.28 |
[Python] is 와 == 연산자의 차이점 정리 (0) | 2023.09.06 |