이번 포스팅은 코딩 테스트를 준비하면서 공부하게 된 파이썬의 자료구조에 대해 정리하였습니다.
Python은 다양한 내장 자료 구조를 제공하여 더 효율적으로 만들어줍니다.
그중에서도 'collections' 모듈은 유용한 데이터 구조와 함께 제공되어 있어
다양한 상황에 편리하게 활용될 수 있습니다.
'collections' 모듈이 포함된 두 가지 데이터 구조에 대해 알아보겠습니다.
| defaultdict
'defaultdict'은 Python의 dictionary 자료 구조와 비슷하지만 한 가지 큰 차이점이 있습니다.
key에 접근할 때 일반적인 dictionary 구조는 KeyError를 발생시키지만,
defaultdict은 존재하지 않는 키에 대해 기본 값을 반환합니다.
이 기본값은 defaultdict을 초기화할 때 제공된 자료형의 기본값으로 설정됩니다.
예시) defaultdict를 활용하는 세 가지 방법
from collections import defaultdict
# 리스트를 기본값으로 가지는 defaultdict 생성
d = defaultdict(list)
d['example'].append(1)
print(d['example']) # 출력: [1]
# int를 기본값으로 가지는 defaultdict 생성
d = defaultdict(int)
d['count'] += 1
print(d['count']) # 출력: 1
# 사용자 정의 함수를 기본값으로 가지는 defaultdict 생성
def default_value():
return 'default'
d = defaultdict(default_value)
print(d['key']) # 출력: 'default'
- list를 기본값으로 가지는 defaultdict 생성 :
- defaultdict(list)는 존재하지 않는 키에 대해 빈 리스트를 기본값으로 가지는 dictionary 자료형을 생성합니다.
- d['example'].append(1)은 'example' 키가 존자하지 않더라도 예외가 발생하지 않으며
'example' 키에 해당하는 값을 리스트로 초기화하고 1을 추가합니다. - int를 기본값으로 가지는 defaultdict 생성 :
- defaultdict(int)는 존재하지 않는 키에 대해 0을 기본값으로 가지는 dictionary 자료형을 생성합니다.
- d['count'] += 1은 'count' 키가 존재하지 않더라도 예외가 발생하지 않으며
'count' 키에 해당하는 값을 리스트로 초기화하고 1을 추가합니다. - 사용자 정의 함수를 기본값으로 가지는 defaultdict 생성
- defaultdict(default_value)는 존재하지 않는 키에 대해 default_value를
기본값으로 가지는 dictionary 자료형을 생성합니다.
- print[d['key'])는 'key'가 존재하지 않더라도 예외가 발생하지 않고
'key'에 해당하는 값을 default_value() 함수의 반합값으로 초기화합니다.
따라서 'default'가 출력됩니다.
| defaultdict을 코딩 테스트에 사용되는 경우
그래프나 트리와 같은 데이터 구조를 처리할 때, 노드 간의 연결 관계를 나타내기 위해
defaultdict을 사용할 수 있습니다. 노드 간의 관계를 쉽게 표현하고 조작할 수 있습니다.
빈도수를 세는 문제나 데이터 그룹화 문제에서 defaultdict을 사용하여 각 요소의 등장 횟수를
쉽게 계산할 수 있습니다.
이렇게 보면 그냥 dictionary를 사용하는 것과 크게 다른 점이 없지만
필요상황에서는 사용하여 문제를 쉽게 해결할 수 있습니다.
| OrderedDict
OrderedDict 자료형도 dictionary 자료형과 거의 동일하지만,
항목을 추가한 순서를 기억한다는 점이 다릅니다. 즉, 키와 값이 쌍을 추가한 순서대로 순회가 가능합니다.
하지만 Python 3.7 이후부터는 기본 dictionary 자료형도 항목 추가 순서를 유지하므로,
OrderedDict을 사용할 필요성이 많이 없어졌습니다.
하지만 3.7 이전 버전의 Python을 사용하면서 항목을 추가한 순서를 보존하려면 OrderedDict을 사용해야 합니다.
예시)
from collections import OrderedDict
# OrderedDict 생성
d = OrderedDict()
d['b'] = 2
d['a'] = 1
d['c'] = 3
print(d) # 출력: OrderedDict([('b', 2), ('a', 1), ('c', 3)])
위 코드를 보시면 dictionary 사용법과 완전히 동일하며 출력도 동일하게 나오는 것을 볼 수 있습니다.
하지만 3.7 버전 이하의 Python의 dictionary는 순서대로 출력되지 않으니 OrderedDict을 사용해야 합니다.
| 마무리
Python의 dictionary 자료 구조 중 하나인 defaultdict과 OrderedDict에 대해 알아보았습니다.
OrderedDict은 사용 빈도가 굉장히 낮아 보이지만 defaultdict는 사용하는 상황이 있을 것 같습니다.
틀린 점이나 질문이 있으시면 댓글로 남겨주세요!
감사합니다!
'Python > Python 정리' 카테고리의 다른 글
Python Namespace : globals()와 locals() 이해 (0) | 2024.03.04 |
---|---|
Python 객체 속성 처리 메서드 : hasattr(), getattr(), setattr() (0) | 2024.02.20 |
Python 에러 발생 방법 (raise) (0) | 2024.02.15 |
Python 예외 처리 방법 (try ~ except) (2) | 2024.02.14 |
[Python] Descriptor 이해 : 객체 속성 제어의 고급 기능 (0) | 2023.10.04 |