-
collections 모듈 - OrderedDictEngineering WIKI/Python 2022. 5. 12. 16:10
1. OrederedDict 란?
OrderedDict 는 기본 딕셔너리(dictionary)와 거의 비슷하지만, 입력된 아이템들(items)의 순서를 기억하는 Dictionary 클래스
# 예제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)]) '''
- 위의 [예제1]에서 확인 할 수 있듯이 키(key)를 기준으로 알파벳 순으로 정렬된(sorted) OrderedDict에 새로운 아이템은 {'grape': 5} 를 추가하게 되면 더이상 정렬은 유지되지 않게 된다.
1) popitem(last=True)
OrderedDict.popitem(last=True) 메소드는 (key,value) 로 OrderedDict의 아이템들을 반환(return) 및 삭제하는 메소드이다.
popitem()의 인자인 last=는 True일 경우는 LIFO(Last In Last Out)방식으로 값을 반환 및 삭제하고, False 일 경우에는 FIFO(First In First Out)방식으로 값을 반환 & 삭제 한다.
# 예제-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) '''
2) move_to_end(key, last=True)
***OrderedDict.move_to_end() 메소드는 key가 존재할 경우, (key,value)를 맨 오른쪽(뒤) 또는 맨 왼쪽(앞)으로 이동해주는 메소드이다. move_to_end(key, last=True)의 인자인 last=는 True 일 경우 맨 오른쪽(뒤)로 이동하고, False 인 경우 맨 왼쪽(앞)으로 이동한다.***
# 예제-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)]) '''
'Engineering WIKI > Python' 카테고리의 다른 글
문자열 split() 과 split(" ") 차이 (0) 2022.05.19 함수 주석 (0) 2022.05.17 any, all 함수 (0) 2022.05.17 operator의 itemgetter를 사용해서 리스트 정렬 (0) 2022.05.17 collections 모듈 - namedtuple (0) 2022.05.12 collections 모듈 - deque (0) 2022.05.12 collections 모듈 - defaultdict (0) 2022.05.12 collections 모듈 - Counter (0) 2022.05.12