1. Dictionary 란?
아래와 같은 형태로 선언할 수 있으며 Key -Value로 이루어진 자료형이다. 내부적으로 해시 테이블로 구성되어 있어 시간복잡도가 낮다는 장점이 존재한다. 또한, 인덱스가 List와 다르게 숫자가 아닌 다양한 형태로 지정이 가능하다.
(딕셔너리명) = {}
(딕셔너리명) = dict()
List 자료형의 경우 최대 시간 복잡도가 O(n)이지만, Dictionary 자료형의 경우 최대 시간 복잡도는 O(1)이다.
즉, Dictionary 사용이 가능하다면, Dictionary 사용하는 것이 시간적인 측면에서 유리하다는 것을 의미한다.
2. Dictionary의 내부 기능
dict[(키 값)] 형태로 딕셔너리의 특정 키에 대한 요소에 접근할 수 있다.
# 요소 접근
print(dict2['a']) # 출력: 1
# 요소 추가 및 갱신
dict2['d'] = 4
dict2['a'] = 10
print(dict2) # 출력: {'a': 10, 'b': 2, 'c': 3, 'd': 4}
키, 값, 키-값 탐색하는 방법은 아래와 같다.
dict2 = {'a': 1, 'b': 2, 'c': 3}
# 키 탐색
for key in dict2.keys():
print(key) # 출력: a, b, c
# 값 탐색
for value in dict2.values():
print(value) # 출력: 1, 2, 3
# 키-값 쌍 탐색
for key, value in dict2.items():
print(key, value) # 출력: ('a', 1), ('b', 2), ('c', 3)
즉, keys(), values() 함수를 통해 키와 값에 대한 접근이 가능해지며, 주로 values()를 활용해서 값을 찾는데 주로 활용한다.
하지만, 특정 키에 대해 접근을 하려고 하는데 존재하지 않는 키라면, 에러가 발생하여 원하는 결과를 얻지 못하는 상황이 존재한다.
이러한 상황을 방지하기 위해 주로 get()을 사용한다. get()은 존재하지 않는 키에 대해 접근할 때 오류를 발생하지 않고 None 값을 리턴하는 함수로 아래와 같은 형태로 사용된다.
# get() 메서드: 키가 없으면 None을 반환하거나 기본값 설정 가능
print(dict2.get('a')) # 출력: 1
print(dict2.get('z', '없음')) # 출력: 없음
3. Dictionary의 활용
Defaultdict는 get()과 비슷한 상황에서 주로 사용한다. 일반적인 Dictionary는 존재하지 않는 키를 조회할 경우 에러 메세지를 출력하여 프로그램이 실행되지 않는다. 하지만, Defaultdict의 경우 디폴트 값을 기준으로 딕셔너리 아이템을 생성한다.
from collections import defaultdict
(변수명) = defaultdict()
Counter는 해시 가능한 객체를 개수를 세기 위해 주로 사용하는 클래스로 주로 아래와 같은 형태로 사용한다.
from collections import Counter
data = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
counter = Counter(data)
# 특정 요소의 개수 확인
print(counter['apple']) # 출력: 3
# 요소 추가
counter['apple'] += 1
print(counter['apple']) # 출력: 4
# 모든 요소와 개수 확인
print(list(counter.items())) # 출력: [('apple', 4), ('banana', 2), ('orange', 1)]