Logo

[파이썬] collections 모듈의 OrderedDict 클래스 사용법

이번 포스팅에서는 collections 모듈의 OrderedDict 클래스에 대해서 알아보겠습니다.

OrderedDict

파이썬 3.6 이전에서는 사전에 데이터를 삽입된 순서대로 데이터를 획득할 수가 없었습니다. 따라서 다음과 같이 무작위 순서로 데이터를 얻게 되는 일이 빈번했었는데요.

>>> dic = {}
>>> dic['A'] = 1
>>> dic['B'] = 2
>>> dic['C'] = 3
>>> dic
{'A': 1, 'C': 3, 'B': 2}
>>> for key, val in dic.items():
...     print(key, val)
...
A 1
C 3
B 2

대신에 collections 모듈의 OrderedDict 클래스를 사용하면 데이터의 순서를 보장받을 수 있었습니다.

>>> from collections import OrderedDict
>>> ordered_dic = OrderedDict()
>>> ordered_dic['A'] = 1
>>> ordered_dic['B'] = 2
>>> ordered_dic['C'] = 3
>>> ordered_dic
OrderedDict([('A', 1), ('B', 2), ('C', 3)])
>>> for key, val in ordered_dic.items():
...     print(key, val)
...
A 1
B 2
C 3
>>> isinstance(ordered_dic, dict)
True

하지만 파이썬 3.6 부터는 기본 사전(dict)도 OrderedDict 클래스와 동일하게 동작하기 때문에 이러한 용도로 OrderedDict 클래스를 사용할 일은 없어졌습니다. 그래도 하위 호환성 보장 측면에서 가급적 데이터의 순서가 중요한 경우에는 사전 보다는 OrderedDict 클래스를 사용하는 것이 권장되겠습니다.

동등성 비교

그렇다고 OrderedDict 클래스를 사용할 일이 아예 없어진 것은 아닙니다. 사전 간에 동등성 비교를 할 때는 데이터의 키와 값이 동일하다면 데이터의 순서가 무시가 되는데요.

>>> dic1 = {'A': 1, 'B': 2, 'C': 3}
>>> dic2 = {'A': 1, 'C': 3, 'B': 2}
>>> dic1 == dic2
True

OrderedDict 클래스 경우 데이터의 순서까지 고려해서 좀 더 엄격하게 동등성 비교가 됩니다.

>>> from collections import OrderedDict
>>> ordered_dic1 = OrderedDict({'A': 1, 'B': 2, 'C': 3})
>>> ordered_dic2 = OrderedDict({'A': 1, 'C': 3, 'B': 2})
>>> ordered_dic1 == ordered_dic2
False
>>> ordered_dic3 = OrderedDict({'A': 1, 'B': 2, 'C': 3})
>>> ordered_dic1 == ordered_dic3
True

마치면서

이상으로 파이썬에서 제공하는 collections 모듈의 OrderedDict 클래스에 대해서 간단히 살펴보았습니다. 좀 더 사용한 세부적인 사항은 아래 파이썬 공식 레퍼런스 문서를 참고 바라겠습니다.