일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 오피스
- 파이썬GUI
- VBA
- matlab
- html
- 깃
- git
- win32com
- windows
- 엑셀
- 윈도우10
- Outlook
- Windows11
- 비주얼베이직
- office
- pythongui
- 파이썬
- 안드로이드
- python3
- python
- Excel
- pandas
- 파워포인트
- 윈도우11
- Android
- Windows10
- 문자열
- 파이썬3
- pyqt5
- 아웃룩
Appia의 IT세상
파이썬[Python] OrderedDict(순서 있는 Dictionary) - collections 모듈 본문
파이썬[Python] OrderedDict(순서 있는 Dictionary) - collections 모듈
Appia 2020. 4. 20. 07:55이번 포스팅은 Collections 모듈에서 OrderedDict(순서 있는 Dictionary)에 대해서 살펴보고자 합니다. 흔히들 많이 이야기 하시는 것이 Dictionary(딕셔너리)와 동일하나, 순서를 가지고 있다고 이야기 합니다. 맞는 말입니다. 하지만, 이 부분에 대해서 정확히 확인하기 위해서는 몇가지를 확인해야 합니다.
먼저 기존 Dictionary(딕셔너리)를 생성하여 비교 해보도로 하겠습니다. 다음을 한번 살펴보겠습니다.
Example)
d = {} d['x'] = 100 d['y'] = 200 d['z'] = 300 v = {} v['y'] = 200 v['x'] = 100 v['z'] = 300 print(d) print(v) if d == v : print(" Dictionary가 동일") | cs |
result)
{'x': 100, 'y': 200, 'z': 300} {'y': 200, 'x': 100, 'z': 300} Dictionary가 동일 | cs |
위의 코드를 살펴보면 분명 결과값에서 d와 v가 다름에도 비교 식에서는 동일하다고 나옵니다. 즉 순서와 상관없이, key/value 쌍이 동일하면 동일하다고 인식하는 것이 일반적인 Dictionary입니다. 그럼 이번에는 Collections 모듈에 포함되어 있는 OrderedDict을 살펴보겠습니다.
example)
import collections ordered_Dict1 = collections.OrderedDict() ordered_Dict1['x'] = 100 ordered_Dict1['y'] = 200 ordered_Dict1['z'] = 300 ordered_Dict2 = collections.OrderedDict() ordered_Dict2['x'] = 100 ordered_Dict2['z'] = 300 ordered_Dict2['y'] = 200 print("Object1") print(ordered_Dict1) print("Object2") print(ordered_Dict2) if ordered_Dict1 == ordered_Dict2 : print(" Dictionary가 동일") else : print(" Dictionary가 다름") | cs |
result)
Object1 OrderedDict([('x', 100), ('y', 200), ('z', 300)]) Object2 OrderedDict([('x', 100), ('z', 300), ('y', 200)]) Dictionary가 다름 | cs |
위와는 거의 같은 형태이나 비교 결과가 다르게 나옵니다. 그 이유는 OrderedDict의 경우 순서까지도 저장되어 있기 때문에 관련해서 순서 또한 비교 대상으로 포함이 됩니다. 그럼 이제는 저희 간단한 관련된 메소드들에 대해서 살펴보도록 하겠습니다.
1. update({newkey : newvalue) : 새로운 맴버 추가
update 명령어는 OrderedDict의 새로운 맴버를 추가하는 명령어입니다. 그럼 다음 예시를 한번 살펴보겠습니다.
example)
import collections ordered_Dict1 = collections.OrderedDict() ordered_Dict1['x'] = 100 ordered_Dict1['y'] = 200 ordered_Dict1['z'] = 300 ordered_Dict1.update({"k":400}) print(ordered_Dict1) | cs |
result)
OrderedDict([('x', 100), ('y', 200), ('z', 300), ('k', 400)]) | cs |
update명령어는 key와 value를 {key:value} 형태로 update 메소드의 인자 값으로 입력해야 합니다.
2. popitem(last) : 객체 반환 후 삭제
popitem 명령어는 인자 값을 last로 가집니다. 다음을 살펴보겠습니다.
last = True 일경우, LIFO형태 즉 Last In / First Out 형태로 반환하고 객체를 삭제 합니다.
last = False 일 경우, FIFO 형태, 즉 First In / First Out 형태로 반환하고 객체를 삭제합니다.
다음 예시를 살펴보겠습니다.
example)
import collections ordered_Dict1 = collections.OrderedDict() ordered_Dict1['x'] = 100 #1번째 입력 ordered_Dict1['y'] = 200 #2번째 입력 ordered_Dict1['z'] = 300 #3번째 입력 print(ordered_Dict1.popitem(last = True)) print(ordered_Dict1) print(ordered_Dict1.popitem(last = False)) print(ordered_Dict1) | cs |
result)
('z', 300) OrderedDict([('x', 100), ('y', 200)]) ('x', 100) OrderedDict([('y', 200)]) | cs |
위의 코드를 한번 보겠습니다. last가 True임으로 가장 나중에 입력된 부분이 가장 나중에 반환되는 형태임 LIFO입니다. 그래서 ('z', 300)이 반환되고, 해당 아이텝이 삭제 됩니다. 그 결과는 [('x', 100),('y', 200)]입니다. 여기에서 last가 False로 다시한번 popitem을 사용해주시면 가장 먼저 입력된 부분이 리턴되고 삭제됩니다. 즉, ('x',100)부분이 리턴되고 OrderedDict에서는 삭제됩니다.
3. move_to_end(key, last) : 객체 순서 이동
move_to_end는 OrderedDict에서 순서를 바꿔주는 역할을 합니다. move_to_end의 인자값은 key값과 last를 가집니다.
last = True 해당 키에 해당하는 객체를 맨 뒤(오른쪽)로 이동
last = False 해당 키에 해당하는 객체를 맨 앞(왼쪽)으로 이동
그럼 예시를 한번 살펴보도록 하겠습니다.
example)
import collections ordered_Dict1 = collections.OrderedDict() ordered_Dict1['x'] = 100 ordered_Dict1['y'] = 200 ordered_Dict1['z'] = 300 print(ordered_Dict1) ordered_Dict1.move_to_end('x',last=True) print(ordered_Dict1) ordered_Dict1.move_to_end('x',last=False) print(ordered_Dict1) | cs |
result)
OrderedDict([('x', 100), ('y', 200), ('z', 300)]) OrderedDict([('y', 200), ('z', 300), ('x', 100)]) OrderedDict([('x', 100), ('y', 200), ('z', 300)]) | cs |
최초에 ('x', 100)을 move_to_end(x,last=True)를 이용하여 가장 오른쪽으로 이동하였습니다(결과 2번째 주). 그런 후에 다시 move_to_end('x', last = False)를 이용해서 ('x', 100)을 가장 맨 앞으로 이동하였습니다.
이번 포스팅은 collections 모듈에서 OrderedDict에 대해서 살펴봤습니다. collections모듈에서 생각보다 관련된 OrderedDict을 많이 활용할 수 있습니다. 혹 궁금하신 점이 있으시면 언제든지 댓글 및 방명록에 글 남겨 주시길 바랍니다.
'Python > Python 기본' 카테고리의 다른 글
파이썬[Python] 문자열에서 공백 제거하기(replace, lstrip, rstrip,strip) (0) | 2020.05.11 |
---|---|
파이썬[Python] defaultdict(기본값 있는 dictionary) - collections 모듈 (0) | 2020.04.22 |
파이썬[Python] Pycharm (파이참)에서 모듈(Module) 설치하기 (1) | 2020.04.16 |
파이썬[Python] 개발환경(IDE) Pycharm (파이참)설치하기 (0) | 2020.04.14 |
파이썬[Python] deque - collections 모듈 (1) | 2020.04.08 |