728x90
1. DefaultDict
defaultdict는 python의 collections 모듈에서 제공하는 딕셔너리 서브클래스로, 기본 값을 제공하는 기능을 가지고 있다.
기본 딕셔너리와 달리 defaultdict는 존재하지 않는 키를 참조할 때 keyError를 발생시키지 않고, 저장된 기본 값을 자동으로 생성하여 반환한다.
1.1 장점
- 기본 값 자동 생성 : 기본 값을 자동으로 생성하여 키가 존재하지 않을 때 발생하는 KeyError를 방지하고, 코드가 더 간결해지고 명확해진다.
- 초기화가 필요 없는 코드 : 값을 추가하기 전에 미리 초기화 할 필요가 ㅇ벗어 코드의 가독성을 높여주고 버그를 줄여준다.
- 코드 간결화 : 코드가 더 간결해지고 명확해진다.
- 타입 안전성 : 일관된 타입의 기본값을 보장할 수 있다.
1.2 단점
- 모든 키에 대해 기본값 생성 : defaultdict는 존재하지 않는 키에 접근할 때마다 기본값을 생성한다. 이는 의도하지 않은 키가 추가되도록 만들 수 있으며, 키가 추가되면 메모리를 사용하게 된다.
- 디버깅의 어려움 : 의도치 않은 키의 추가로 디버깅을 어렵게 만들 수가 있다.
- 명시적이지 않은 코드 : 기본값 생성 함수가 암묵적으로 호출되기 때문에 코드의 의도가 명시적이지 않을 수 있으며, 코드의 가독성을 떨어트릴 수 있다.
1.3 기본적인 사용방법
- 기본값을 생성하는 함수를 인자로 받는다
- 새로운 키를 생성할때마다 이 함수가 호출되어 기본값이 생성된다.
from collections import defaultdict
# int를 기본값 생성 함수로 사용하는 defaultdict
int_dict = defaultdict(int)
int_dict['a'] += 1
print(int_dict) # 출력: defaultdict(<class 'int'>, {'a': 1})
# list를 기본값 생성 함수로 사용하는 defaultdict
list_dict = defaultdict(list)
list_dict['a'].append(1)
print(list_dict) # 출력: defaultdict(<class 'list'>, {'a': [1]})
위 코드에서 list_dict['a']를 처음 참조할 때 자동으로 빈 리스트가 생성된다. 그 후 append 메소드를 사용하여 값을 추가할 수 있다.
1.4 기본적인 메소드
defaultdict는 기본적으로 dict 클래스의 서브클래스이기 떄문에 dict 객체에서 사용할 수 있는 대부분의 메소드를 그대로 사용할 수 있다.
1.4.1 defaultdict.keys()
딕셔너리의 모든 키를 반환한다
1.4.2 defaultdict.values()
딕셔너리의 모든 값을 반환한다
1.4.3 defaultdict.items()
딕셔너리의 모든 키-값 쌍을 튜플 형태로 반환한다.
4.4 defaultdict.get(key, default=None)
주어진 키에 대응하는 값을 반환한다. 만약 키가 존재하지 않으면 기본값을 반환한다.
from collections import defaultdict
dd = defaultdict(list)
dd['a'].append(1)
dd['b'].append(2)
keys = dd.keys()
print(keys) # dict_keys(['a', 'b'])
values = dd.values()
print(values) # dict_values([[1], [2]])
items = dd.items()
print(items) # dict_items([('a', [1]), ('b', [2])])
value = dd.get('c', [])
print(value) # []
그 밖에도 값을 업데이트하는 update, 주어진 키에 해당하는 값을 제거하고 반환하는 pop, 모든 항목을 제거하는 clear 등의 메소드가 존재한다.
728x90
'회고' 카테고리의 다른 글
[24.06.02] 99클럽 코테 스터디 14일차 TIL : Class, Attribute, self (0) | 2024.06.02 |
---|---|
[24.06.01] 99클럽 코테 스터디 13일차 TIL - OrderedDict (0) | 2024.06.01 |
[24.05.30] 99클럽 코테 스터디 11일차 TIL - 회전 알고리즘, 튜플 자료형 (0) | 2024.05.30 |
[24.05.29] 99클럽 코테 스터디 10일차 TIL - 완전 탐색 알고리즘 (0) | 2024.05.29 |
[24.05.28] 99클럽 코테 스터디 9일차 TIL - 해시 알고리즘, Set 자료형 (0) | 2024.05.28 |