2018년 1월 7일 일요일

Python dict 와 OrderedDict 형


파이썬에서 주로 사용하는 Dictionary 를 for 문등으로  key값을 불러오면,
key값이 값을 집어 넣은 순서대로 나오는 것이 그때 그때 순서가 바뀌기도 하고
random으로 저장이 되기도 합니다.
즉, 값을 집어 넣은 순서대로 저장되지 않는다인데,

값을 집어 넣은 순서대로 사용하고 싶을 때,
collections에 있는 OrderedDict 을 사용할수 있습니다.

하지만, 이 경우에도 키 값을 집어넣은 순서대로 key를 저장하는 것이라,
iteration되는 키값의 정렬이 필요한 경우에는
OrderedDict 보다는 sorted 구문으로  key를 정렬하는 것이 필요합니다.

OrderedDict의 예제는 아래와 같습니다


from collections import OrderedDict

dt1 = {}
dt1['aaa'] ='NewYork'
dt1['bbb'] ='London'
dt1['ccc'] ='Chicago'
dt1['ddd'] ='Manchester'
dt1['eee'] ='Tokyo'

dt2= OrderedDict()
dt2['aaa'] ='NewYork'
dt2['bbb'] ='London'
dt2['ccc'] ='Chicago'
dt2['ddd'] ='Manchester'
dt2['eee'] ='Tokyo'

dt3= OrderedDict()
dt3['ddd'] ='Manchester'
dt3['aaa'] ='NewYork'
dt3['ccc'] ='Chicago'
dt3['eee'] ='Tokyo'
dt3['bbb'] ='London'

print 'Dictionary\n',dt1.keys()
print 'Dictionary(Sort)\n',sorted(dt1.keys())
print 'OrderedDict\n',dt2.keys()
print 'OrderedDict(Out of order)\n',dt3.keys()

'''
Dictionary
['eee', 'aaa', 'bbb', 'ccc', 'ddd']
Dictionary(Sort)
['aaa', 'bbb', 'ccc', 'ddd', 'eee']
OrderedDict
['aaa', 'bbb', 'ccc', 'ddd', 'eee']
OrderedDict(Out of order)
['ddd', 'aaa', 'ccc', 'eee', 'bbb']

'''

dt1은 순서대로 넣었지만, key를 출력해보면, 순서가 뒤죽박죽이 되어있는 것을 볼 수 있습니다
그래서 dt2처럼 sorting을 해서 정렬시키는 방법이 있고,
dt3과 OrderedDict을 선언하고 순서대로 넣으면 그대로 저장이 되기도하고,
dt4의 경우는 OrderedDict을 선언하더라도, 순서를 뒤죽박죽으로 넣으면,
그 순서대로 저장이 되어있는 것을 볼 수가 있습니다.

즉, 순서를 섞어서 넣는다고 OrderedDict은 알아서 정렬 시켜주는 것이 아니라,
단지 넣은 순서대로 키를 내어주는 역할을 합니다.

그래서, 넣은 순서와 상관없이 키값의 정렬이 필요한 경우에는 OrderedDict보다는 sorted를
사용해야 됩니다.

dict 나 OrderedDict이 비슷하지만 약간의 차이들이 있으므로 그부분을 인식하고 목적에 맞는 사전형 데이터를 쓰시면됩니다.




댓글 없음:

댓글 쓰기