본문 바로가기
Python

[Py] collection.OrderedDict

by ds31x 2025. 4. 4.

OrderedDict는 삽입된 순서를 보존하는 기능을 추가한 일종의 dict임.

  • collections 모듈에서 제공.
  • Python 3.7부터 built-in dict도 삽입 순서를 보존하게 되었음.
  • 하지만 OrderedDict는 그 외에 몇 가지 중요한 추가 기능을 다음과 같이 제공함

데이터의 순서가 중요한 경우나, cache처럼 삽입/제거 순서에 따라 다른 제어가 필요한 경우에 사용되는 데이터 구조임.

가장 유명한 활용처 중 하나는 PyTorch에서 모델 및 파라메터를 저장/로드 하는 데 사용되는 경우임.


0. 순서 유지

Python 3.7부터는 dict도 순서를 유지함.

from collections import OrderedDict

# OrderedDict 생성
print("=== OrderedDict 생성 및 기본 작업 ===")
od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print("초기 OrderedDict:", od)

# 항목 추가
od['d'] = 4
print("항목 추가 후:", od)

1. move_to_end() 메서드:

  • 특정 키를 사전의 맨 처음이나 맨 끝으로 이동시킬 수 있음.
from collections import OrderedDict
d = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
d.move_to_end('b')  # 'b'를 맨 끝으로 이동
print(d)  # OrderedDict([('a', 1), ('c', 3), ('b', 2)])

d.move_to_end('a', last=False)  # 'a'를 맨 앞으로 이동
print(d)  # OrderedDict([('a', 1), ('c', 3), ('b', 2)])

2. 등가성(equality) 비교 방식:

  • OrderedDict는 일반 dict와 달리 항목의 순서까지 고려하여 비교.
from collections import OrderedDict
od1 = OrderedDict([('a', 1), ('b', 2)])
od2 = OrderedDict([('b', 2), ('a', 1)])
print(od1 == od2)  # False (순서가 다름)

# 반면 일반 dict는 순서를 고려하지 않음
d1 = {'a': 1, 'b': 2}
d2 = {'b': 2, 'a': 1}
print(d1 == d2)  # True

3. popitem() 메서드

  • last 매개변수를 통해 마지막 항목(기본값) 또는 첫 번째 항목을 제거할 수 있음.
from collections import OrderedDict
d = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
d.popitem()  # 마지막 항목 ('c', 3) 제거
d.popitem(last=False)  # 첫 번째 항목 ('a', 1) 제거

같이보면 좋은 자료들

2025.04.04 - [Python] - [Py] collections 모듈 (summary) - 작성중

 

[Py] collections 모듈 (summary) - 작성중

Python의 collections 모듈은 파이썬의 built-in 자료구조를 확장한 special container 클래스들을 제공함.1. Counter요소의 개수를 세는 dictionary의 subclass.해시 가능한 객체의 카운트를 저장함.from collections impor

ds31x.tistory.com