OrderedDict는 Python의 collections 모듈에서 제공하는 딕셔너리 서브클래스입니다. 가장 큰 특징은 항목이 추가된 순서를 기억한다는 점이며, 일반 딕셔너리에서 사용하는 메서드들을 모두 그대로 지원합니다.
OrderedDict의 주요 동작 방식
- 항목이 삽입된 순서가 그대로 유지됩니다.
- 기존 키에 새 값을 덮어쓰더라도 원래 삽입 위치는 변하지 않습니다.
- 반면, 항목을 삭제한 후 다시 삽입하면 해당 항목은 맨 뒤로 이동합니다.
OrderedDict 생성 및 기본 사용법
일반 딕셔너리의 items()를 전달하여 OrderedDict를 만들면 원본의 삽입 순서가 그대로 보존됩니다.
>>> from collections import OrderedDict
>>> d = {'banana': 3, 'apple': 4, 'pear': 1, 'mango': 2}
>>> od = OrderedDict(d.items())
>>> od
OrderedDict([('banana', 3), ('apple', 4), ('pear', 1), ('mango', 2)])
정렬된 OrderedDict 만들기
sorted() 함수를 함께 사용하면 키를 알파벳순으로 정렬한 OrderedDict를 손쉽게 만들 수 있습니다.
>>> od = OrderedDict(sorted(d.items()))
>>> od
OrderedDict([('apple', 4), ('banana', 3), ('mango', 2), ('pear', 1)])
popitem()으로 항목 제거하기
popitem()은 기본적으로 마지막 항목을 제거하고 반환합니다(LIFO 방식). 따라서 어떤 순서로 OrderedDict를 만들었는지에 따라 반환되는 항목이 달라집니다.
>>> t = od.popitem()
>>> t
('pear', 1)
>>> od = OrderedDict(d.items())
>>> t = od.popitem()
>>> t
('mango', 2)
첫 번째 경우에는 정렬된 순서에서 가장 뒤에 있는 ('pear', 1)이, 두 번째 경우에는 삽입 순서상 마지막인 ('mango', 2)가 반환되는 것을 확인할 수 있습니다.
일반 dict와의 차이점
Python 3.7부터는 일반 딕셔너리도 삽입 순서를 유지하지만, OrderedDict는 여전히 유용한 추가 기능을 제공합니다.
move_to_end(): 특정 키를 맨 앞 또는 맨 뒤로 이동시킬 수 있습니다.popitem(last=False): 첫 번째 항목을 꺼내는 FIFO 방식의 동작이 가능합니다.- 동등성(
==) 비교 시 항목의 순서까지 고려합니다. 일반 dict는 순서와 관계없이 비교합니다.
마무리
OrderedDict는 순서가 중요한 데이터를 다룰 때 매우 유용한 자료구조입니다. 설정 파일 처리, 순서 기반 캐시 구현, 직렬화 작업 등 항목 순서를 명확하게 보장해야 하는 상황에서 적극적으로 활용해 보세요.