Story 17. dict & OrderedDict
1. dict은 저장 순서를 유지하기 위해 시작했다.
- dict가 있기 때문에 odereddict가 필요하지 않다고 생각하면 안 됨.
- 둘은 기본적인 기능이 같지만, 다른 성질을 가지고 있기 때문 = 즉, 사용하는 때가 다름
- 파이썬은 원래 dict가 저장 순서를 유지하지 않았음
- 3.7버전 이후부터 유지하기 시작
- 따라서 위 예제를 통해 출력한 순서대로 저장된 것을 알 수 있음
* 정보(information)
- 정보라는 것에는 a에 1을 저장, b에 2를 저장과 같이 키와 값을 저장하는 것도 정보로 포함 되지만, 저장 순서도 정보가 될 수 있음
- 따라서 {a = 1, b = 2, c = 3}과 {a = 1, c = 3, b = 2}이 다르다고 인식한다면, 정보의 순서가 어떠한 가치를 가질 때!
* dict와 OrderedDict의 차이점
① dict
- 저장 순서에 신경을 쓰지 않음
- 즉, 저장 순서가 다른 두 딕셔너리를 같은 데이터라고 인식
- 저장 순서를 information으로 취급하지 않기 때문!
② OrderedDict
- 저장 순서에 신경을 씀
- 저장 순서도 다른 information으로 인식하기 때문
→ 따라서, dict를 사용할 때 OrderedDict를 써볼까? 이런 식으로 접근하면 안 됨
- OrderedDict를 사용하는 예제
- collections 모듈으로부터 OrderedDict를 불러옴
- od = OrderedDict() : OrderedDict 객체 생성
- 하지만 앞서 언급했듯이, 파이썬 3.7버전 부터는 dict가 저장 순서를 유지하기 때문에 OrderedDict을 이렇게 저장하려는 목적으로 굳이 사용할 필요는 없음
2. 그럼에도 불구하고 OrderedDict을 써야 할 이유가 있다면?
- 사실 두 개는 사용되는 때가 다르기 때문에, 상황에 따라 다르게 써야 함
- 따라서 OrderedDict를 써야만 하는 상황이 존재함
- 위 예제는 dictionary를 사용하는 예제
- 즉, d1과 d2는 저장 순서는 다르지만 내용물이 같아 True로 인식
- dict함수는 저장 순서를 information으로 취급하지 않기 때문
- 저장 내용, 키와 값을 저장한 information은 서로 일치하지만, 저장 순서의 information은 일치하지 않기 때문에 False인 것을 알 수 있음
- dict의 경우, 저장 순서를 바꾸지 못함
: 그럴 필요가 없고, dict함수는 저장 순서를 하나의 정보라고 인식하지 않기 때문
- 그러나 OrderedDict의 경우, 저장 순서를 변경하는 연산도 있음
: OrderedDict는 저장 순서도 하나의 정보라고 인식하기 때문
- od.move_to_end('b') : 키가 'b'인 키와 값을 맨 뒤로 이동시키는 연산
- od.move_to_end('b', last = False) : last = False로 두면 맨 앞으로 가게 됨. 즉 'b'인 키와 값을 맨 앞으로 이동시키는 연산