ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • collections 모듈 - OrderedDict
    Engineering 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
Designed by Tistory.