파이썬 컬렉션 모듈 OrderedDict (collections module)

컬렉션 모듈의 두번째로 오더드딕트 OrderedDict에 대해 알아본다. 사전형 자료구조에 대해서는 지난 시간에 학습했었다.

이 사전 자료구조 dict는 원래 입력된 순서를 보장해주지 않고 임의의 순서로 자료를 저장하고 출력해주었다. 그래서 입력된 순서대로 dict를 반환하는 OrderedDict 라는 형태를 컬렉션 모듈에서 불러와서 이용을 했다.

말을 과거형으로 적었는데, 지금은 사실상 그다지 필요없는 기능이 되었기 때문이다. 파이썬 3.7부터는 기본 dict 구조에서도 입력된 순서를 보장하는 형태로 바뀌었다. 그래서 OrderedDict는 거의 쓸 필요가 없게 되어버림

넘어가도 되긴 한데 강의 커리큘럼에는 아직 포함이 되어 있으니 그래도 짚고 넘어갈 겸 포스팅을 하고있다. 사전 구조가 중요한 개념이기 때문에 복습도 할 겸

선언방식

기본적으로 사전 선언과 같다. {} 중괄호로 변수선언을 하고, 대괄호로 [key]=value 형태로 원소를 넣어준다. for 반복문과 items() 함수를 이용해서 key value 쌍을 출력해보면 입력한 순서대로 나옴을 알 수 있다.

from collections import OrderedDict

d={}
d['y']=100
d['a']=500
d['k']=200
d['q']=400

for k,v in d.items():
    print(k,v)

## 결과
y 100
a 500
k 200
q 400

일단 OrderedDict를 불러오고 변수 d를 선언해서 데이터를 입력해준 뒤 출력하면 위와 같이 입력한 순서대로 출력이 된다.

for k,v in OrderedDict(sorted(d.items(), key=lambda t:t[0])).items():
    print(k,v)

## 결과
a 500
k 200
q 400
y 100

여기서 key 값으로 정렬을 시켜서 sorted 된 사전형태를 다시 OrderdDict의 구조로 묶고 그것의 .items() 함수를 이용해 key / value 쌍을 반복문으로 출력하면 key 값이 오름차순으로 정렬되어서 나온다.

def get_key(x):
    return x[0]

sorted(d.items(), key=get_key)

## 결과
[('a', 500), ('k', 200), ('q', 400), ('y', 100)]

lambda를 아직 공부하지 않은 부분이라 저게 뭐지? 싶은데 이렇게 함수를 정의해서 sorted를 해줄수도 있다. 

사전 형태로 저장하기

sorted를 사용하면 리스트 형태로 반환을 시켜주는 것이고 이것을 다시 OrderedDict로 묶어주면 사전형태로 저장이 된다.

사전은 {key1:value1, key2:value2} 형태였는데 OrderedDict 형태로 하니 리스트처럼 대괄호 안으로 들어가 있는 모습이다.

OrderdDict에 대해 간단히 알아보았다. 최신버전의 파이썬에서는 굳이 사용할 이유가 없는 기능이지만 아래와 같은 경우에 필요할 수 있다.

  1. 파이썬 버전이 3.6 이하에서 프로젝트를 할 경우
  2. reverse() 와 같이 OrderedDict의 특별한 기능을 이용하고자 할 경우

그 밖에 속도 측면에서도 딱히 Dict보다 나을 게 없고, 만 개 이상의 큰 사전이 필요한 경우에는 아예 Numpy 또는 Pandas 라이브러리에서 보다 효율적인 데이터 구조를 이용해야 한다.