파이썬으로 올리는 블로깅 하나~
지난 2009년 8월 17일에 파이썬 3.1.1 버전이 정식으로 릴리즈가 되었습니다.
2008년 10월 3일 정식으로 릴리즈된 것을 생각해보면,
그만큼 빠르게 개발자의 요구사항을 받아들이며 진화중임에 틀림없습니다.
어떻게 보면 MS가 예전 닷넷 1.0에서 2.0까지 돈을 쏟아부어 일으킨 것만큼의 변화가
파이썬에서는 돈 한푼 안들이고 일어나고 있는 것입니다. 참 신기하죠잉~ ^^;;;
마소 10월호에 관련된 내용을 기고할 예정이나 3.1 버전의 변화만으로도
이미 제가 할당받은 분량을 훌쩍 넘어가게 되어서 짬짬히 블로그에 기록하겠습니다.
그래서 이번에는 Ordered Dictionaries(순서를 갖는 사전)입니다.
기존 딕셔너리(Dictionary) 객체의 경우, 해당 객체를 순회(iterate)시 그 순서는 임의(random)로 선정되었습니다.
암묵적으로 '키/값' 쌍의 알파벳순서로 순회하는 것이 보통이지만,
실제로 인터프리터의 버전에 따라 그렇게 동작하지 않는 경우도 많았고,
인터프리터 자체에서도 이에 대해서 어떠한 보장도 하지 않았습니다.
아래의 코드는 파이썬 2.6에서 딕셔너리 객체를 순회하는 예로, 입력된 순서대로 순회하지 않는 것을 확인할 수 있습니다.
파이썬 3.1에서는 새롭게 OrderedDict 객체가 추가되었습니다.
이 객체는 키가 입력된 순서를 내부적으로 기억하고 있어, 순회시 입력된 순서대로 순회하게 됩니다.
만약 OrderedDict 객체에 존재하던 키의 값이 갱신되는 경우,
처음에 입력된 순서에는 영향을 미치지 않습니다.
하지만 기존에 존재하였던 키의 값을 삭제하고 재입력하는 경우에는
해당 키는 가장 마지막에 입력된 것으로 간주됩니다.
그 외 popitem() 메소드의 경우, 당연히 입력된 순서의 역순으로 동작하게 됩니다.
또한 아래와 같이 OrderedDict 객체의 값을 생성자의 인자로 전달시 동일한 키를 중복하는 경우,
값은 가장 마지막의 값으로 입력되나, 키의 순서는 입력된 순서로 유지되게 됩니다.
아래의 예제는 "orange"의 값은 두번 입력되었으나,
가장 첫번째 저장된 것을 키의 입력 순서로 저장하는 것을 확인할 수 있습니다.
파이썬 3.1에서 정식 적용된 OrderedDict 객체는
이미 내부 모듈인 configparser, json 모듈에서 사용되고 있으며,
3rd party 모듈인 PyYAML에서도 널리 사용되고 있다고 공식 문서에 적혀있네요.
이올린에 북마크하기
이올린에 추천하기
