dict은 저장 순서를 유지하기 시작했다.
딕셔너리는 저장 순서를 유지한다.(파이썬 버전 3.7부터)
d = {} d['a'] = 1 d['b'] = 2 d['c'] = 3 d > {'a' : 1, 'b' : 2, 'c' : 3}
for kv in d.items(): print(kv) > ('a',1) > ('b',2) > ('c',3)
딕셔너리는 순서를 정보(information)로 받아들이지 않는다.
{ a = 1, b = 2, c = 3 } = { b = 2, c = 3, a = 1}
Ordered Dict
from collections import OrderedDict od = OrderedDict() # OrderedDict 객체 생성 od['a'] = 1 od['b'] = 2 od['c'] = 3 od > OrderedDict([('a',1),('b',2),('c',3)])
for kv in od.items(): # 딕셔너리와 마찬가지로 items 메소드 호출 가능 print(kv) > ('a',1) > ('b',2) > ('c',3)
OrderedDict은 순서를 정보로 받아들인다.
허나 이제는 dict이 저장 순서를 유지하므로 OrderedDict을 이러한 목적을 사용할 필요가 없다.
그래도 OrderedDict을 써야 할 이유가 있다면?
[dict]d1 = dict(a = 1, b = 2, c = 3) d2 = dict(c = 3, a = 1, b = 2) d1 == d2 > True
[OrderedDict]
from collections import OrderedDict od1 = OrderedDict(a = 1, b = 2, c = 3) od2 = OrderedDict(c = 3, a = 1, b = 2) od1 == od2 > False
위와 같이 dict과 OrderedDict의 차이점은 저장 순서를 정보로 받아들이는지에 대한 유무이다.
from collections import OrderedDict od = OrderedDict(a = 1, b = 2, c = 3) for kv in od.items(): print(kv, end = ' ') > ('a',1) ('b',2) ('c',3) od.move_to_end('b', last = False) # 키가 'b'인 키와 값을 맨뒤로 이동 for kv in od.items(): print(kv, end = ' ') > ('b',2) ('a',1) ('c',3)