OrderedDict
- 기본 딕셔너리와 거의 비슷하지만, 입력된 아이템들의 순서를 기억하는 Dictionary 클래스
- 즉 Dict와 달리, 데이터를 입력한 순서대로 dict를 반환함
- collections로 부터 import 하여 사용
from collections import OrderedDict
기존 Dict 예시
d = {}
d['Hello'] = 100
d['How'] = 200
d['are'] = 300
d['you'] = 500
print(d)
v = {}
v['How'] = 200
v['are'] = 300
v['you'] = 500
v['Hello'] = 100
print(v)
if(d == v):
print("두 Dictionary가 동일하다")
두 Dictionary의 입력 순서를 다르게 해주어서 결과출력이 d, v가 다름에도 비교식은 같다고 판단한다,
즉 순서와 상관없이, key/value 값이 동일하므로 동일한 자료로 인식하는 것이 일반적인 Dictionary이다.
OrderedDict 예시
from collections import OrderedDict
d = OrderedDict()
d['Hello'] = 100
d['How'] = 200
d['are'] = 300
d['you'] = 500
print(d)
v = OrderedDict()
v['How'] = 200
v['are'] = 300
v['you'] = 500
v['Hello'] = 100
print(v)
if(d == v):
print("두 Dictionary가 동일하다")
else:
print("두 Dictionary는 다르다.")
위의 Dict예제에서 Dict 대신 OrderedDict로 바꿔보았다.
출력형태는 비슷하지만 비교 결과가 다르게 나온다. 왜냐하면 OrderedDict의 경우에는 순서까지도 저장되기 때문에 순서 또한 비교 대상으로 포함이 되기 때문이다.
- OrderedDict를 이용하면 기존 ㄴDict type의 값을, value 또는 key 값으로 정렬할 때 사용할 수 있다.
from collections import OrderedDict
d = {}
d['b'] = 600
d['d'] = 200
d['c'] = 300
d['a'] = 500
print(d)
#key값으로 정렬
od = OrderedDict(sorted(d.items(), key = lambda t : t[0]))
print("key 값으로 정렬 후 : ")
print(od)
#value값으로 정렬
od = OrderedDict(sorted(d.items(), key = lambda t : t[1]))
print("value 값으로 정렬 후 : ")
print(od)
위의 예제는 기존의 Dict를 이용하여 정렬된 형태의 OrderedDict를 생성하는 예제이다.
위의 코드에서
sorted(d.items(), key = lambda t : t[0]) 는 dictionary의 key값으로 정렬하겠다,
sorted(d.items(), key = lambda t : t[1]) 는 dictionary의 value값으로 정렬하겠다라는 의미이다.
OrderedDict의 함수를 살펴보자.
Update()({newkey : new value})
update()는 OrderedDict에 새로운 멤버를 추가하는 함수이다.
from collections import OrderedDict
d = OrderedDict()
d['b'] = 600
d['d'] = 200
d['c'] = 300
d['a'] = 500
# {'e' : 700} 멤버 추가
d.update({'e' : 700})
print(d)
기존의 dict에 { 'e' : 700 } 인 멤버가 추가된 것을 확인할 수 있다.
popitem(last = True)
popitem은 OrderedDict의 아이템을 반환 및 삭제하는 함수이다.
인자인 last에 따라 결과가 다르다. (기본값은 last = true이다.)
last가 True인 경우 가장 마지막에 삽입된 데이터를 반환하고 삭제한다.(Last In First Out, LIFO)
last가 False인 경우 가장 처음 삽입된 데이터를 반환하고 삭제한다.(First In First Out, FIFO)
from collections import OrderedDict
d = OrderedDict()
d['b'] = 600
d['d'] = 200
d['c'] = 300
d['a'] = 500
print("기존의 OrderedDict : ")
print(d)
print("popitem(last = True) 실행 후 : ")
d.popitem(last=True)
print(d)
print("popitem(last = False) 실행 후 : ")
d.popitem(last=False)
print(d)
예제 실행결과를 살펴보면 popitem(last = True)를 실행하였을 때 가장 마지막에 삽입된 { 'a' : 500 } 아이템이 삭제 되었으며, popitem(last = False)인 경우 가장 먼저 삽입된 { 'b' : 600 } 아이템이 삭제된 것을 볼 수 있다.
move_to_end(key, last = True)
move_to_end()는 key값에 해당되는 아이템을 OrderedDict의 맨 뒤 혹은 맨 앞으로 이동시키는 함수이다.
last가 True인 경우 해당 아이템이 맨 뒤로 이동한다.
last가 False인 경우 해당 아이템이 맨 앞으로 이동한다.
from collections import OrderedDict
d = OrderedDict()
d['b'] = 600
d['d'] = 200
d['c'] = 300
d['a'] = 500
print("기존의 OrderedDict : ")
print(d)
d.move_to_end('d',True)
print("d.move_to_end('d',True) 실행 후 : ")
print(d)
d.move_to_end('a',False)
print("d.move_to_end('a',False)")
print(d)
d.move_to_end('d',True) 를 실행하였을 때 { 'd' : 200 } 이 맨 뒤로 이동한 것을 확인할 수 있다.
d.move_to_end('a',False) 를 실행하였을 때 { 'a' : 500 } 이 맨 앞으로 이동한 것을 확인할 수 있다.
Python Collections의 OrderedDict에 대하여 살펴보았다.
'About > Python' 카테고리의 다른 글
[Python] Counter (단어 개수 세기) (2) | 2020.12.30 |
---|---|
[Python] Collections - defaultdict (단어 개수 세기) (0) | 2020.12.27 |
[Python] Collections - deque (0) | 2020.12.20 |
[Python] Lambda & Map & Reduce (0) | 2020.12.20 |
[Python] Enumerate(), Zip() (0) | 2020.12.13 |