일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- scrapy
- 텐서플로
- 하이브
- HelloWorld
- tensorflow
- 딥러닝
- graph
- python
- 알고리즘
- NumPy
- hadoop2
- Java
- collections
- RNN
- GRU
- C
- recursion
- LSTM
- 그래프이론
- 하둡2
- yarn
- codingthematrix
- effective python
- 코딩더매트릭스
- C언어
- Sort
- 선형대수
- hive
- 주식분석
- 파이썬
- Today
- Total
EXCELSIOR
collections 모듈 - OrderedDict 본문
collections.OrderedDict
1. OrederedDict 란?
OrderedDict 는 기본 딕셔너리(dictionary)와 거의 비슷하지만, 입력된 아이템들(items)의 순서를 기억하는 Dictionary
클래스이다. collections.OrderedDict
의 자세한 내용은 docs.python.org에서 확인 할 수 있다.
OrderedDict 는 아이템들(items)의 입력(또는 삽입) 순서를 기억하기 때문에 sorted()
함수를 사용하여 정렬된 딕셔너리(sorted dictionary)를 만들때 사용할 수 있다. 아래 [예제1]은 sorted dictionary 를 만드는 예제이다.
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 31 32 33 34 35 36 37 38 | # 예제1 - sorted()를 이용한 정렬된 OrderedDict 만들기 from collections import OrderedDict # 기본 딕셔너리 d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange':2} # 키(key)를 기준으로 정렬한 OrderedDict ordered_d1 = OrderedDict(sorted(d.items(), key=lambda t:t[0])) print(ordered_d1) ''' 결과 OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)]) ''' # 값(value)를 기준으로 정렬한 OrderedDict ordered_d2 = OrderedDict(sorted(d.items(), key=lambda t:t[1])) print(ordered_d2) ''' 결과 OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)]) ''' # 키(key)의 길이(len)를 기준으로 정렬한 OrderedDict ordered_d3 = OrderedDict(sorted(d.items(), key=lambda t:len(t[0]))) print(ordered_d3) ''' 결과 OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)]) ''' # ordered_d1에 새로운 아이템 추가 ordered_d1.update({'grape': 5}) print(ordered_d1) ''' 결과 OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1), ('grape', 5)]) ''' | cs |
위의 [예제1]에서 확인 할 수 있듯이 키(key)를 기준으로 알파벳 순으로 정렬된(sorted) OrderedDict
에 새로운 아이템은 {'grape': 5}
를 추가하게 되면 더이상 정렬은 유지되지 않게 된다.
2. collections.OrderedDict의 메소드들
OrderedDict
의 메소드들은 기본 딕셔너리(Dict)와 거의 비슷하다. OrderedDict
메소드들 중 popitem 과 move_to_end 에 대해 알아보도록 하자.
1) popitem(last=True)
OrderedDict.popitem(last=True)
메소드는 popitem()
의 인자인 last=
는 True 일 경우는 LIFO(Last In Last Out)방식으로 값을 반환 및 삭제하고, False 일 경우에는 FIFO(First In First Out)방식으로 값을 반환 & 삭제 한다.
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 31 32 33 34 35 36 37 38 39 40 | # 예제-2 OrderedDict.popitem() import operator from collections import OrderedDict # 기본 딕셔너리 d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange':2} # 키(key)를 기준으로 정렬한 OrderedDict ordered_d = OrderedDict(sorted(d.items(), key=operator.itemgetter(0), reverse=False)) print(ordered_d) # popitem(last=True) 일경우 : LIFO(Last In Last Out)방식으로 pop, default는 True임 for i in range(len(ordered_d)): print(ordered_d.popitem(last=True)) print('='*50) # 키(key)를 기준으로 정렬한 OrderedDict ordered_d = OrderedDict(sorted(d.items(), key=operator.itemgetter(0), reverse=False)) print(ordered_d) # popitem(last=False) 일경우 : FIFO(First In First Out)방식으로 pop for i in range(len(ordered_d)): print(ordered_d.popitem(last=False)) ''' 결과 OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)]) ('pear', 1) ('orange', 2) ('banana', 3) ('apple', 4) ================================================== OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)]) ('apple', 4) ('banana', 3) ('orange', 2) ('pear', 1) ''' | cs |
2) move_to_end(key, last=True)
OrderedDict.move_to_end()
메소드는 move_to_end(key, last=True)
의 인자인 last=
는 True 일 경우 맨 오른쪽(뒤)로 이동하고, False 인 경우 맨 왼쪽(앞)으로 이동한다.
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 | # 예제-3 OrderedDict.move_to_end() import operator from collections import OrderedDict # 기본 딕셔너리 d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange':2} # 키(key)를 기준으로 정렬한 OrderedDict ordered_d = OrderedDict(sorted(d.items(), key=operator.itemgetter(0), reverse=False)) print(ordered_d) # move_to_end(key, last=True)인 경우: 해당 (key, value)가 맨 오른쪽(뒤)으로 이동함 ordered_d.move_to_end('banana', last=True) print("move_to_end('banana', last=True) >>> {}".format(ordered_d)) # move_to_end(key, last=False)인 경우: 해당 (key, value)가 맨 왼쪽(앞)으로 이동함 ordered_d.move_to_end('banana', last=False) print("move_to_end('banana', last=False) >>> {}".format(ordered_d)) ''' 결과 OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)]) move_to_end('banana', last=True) >>> OrderedDict([('apple', 4), ('orange', 2), ('pear', 1), ('banana', 3)]) move_to_end('banana', last=False) >>> OrderedDict([('banana', 3), ('apple', 4), ('orange', 2), ('pear', 1)]) ''' | cs |
'Python > 자료구조' 카테고리의 다른 글
내장함수 zip() 과 itertools.zip_longest() 함수 (0) | 2017.09.21 |
---|---|
collections 모듈 - namedtuple (5) | 2017.08.22 |
collections 모듈 - deque (3) | 2017.08.20 |
collections 모듈 - defaultdict (0) | 2017.08.18 |
collections 모듈 - Counter (7) | 2017.08.17 |