파이썬 딕셔너리는 순서를 관리하지 않는다.
내가 a, b, c 순으로 키를 입력했다고해서, 출력 시 a, b, c로 출력되지 않는다는 말이다.
진짜 그런지 딕셔너리를 생성해 보았다.
>>> random_dict = dict() >>> random_dict['a'] = 1 >>> random_dict['b'] = 2 >>> random_dict['c'] = 3 >>> random_dict {'a': 1, 'b': 2, 'c': 3} |
순서대로 출력된다.
조금만 더 넣어보자.
>>> random_dict['pros'] = 4 >>> random_dict['cons'] = 5 >>> random_dict {'a': 1, 'b': 2, 'c': 3, 'pros': 4, 'cons': 5} |
계속 순서대로 출력된다.
조금만 더...
>>> random_dict['aa'] = 6 >>> random_dict {'a': 1, 'b': 2, 'c': 3, 'pros': 4, 'cons': 5, 'aa': 6} |
...
어쨌든 맞을거다. 책에 그렇게 나와있다.
몇번 그런걸 본적이 있는것 같기도 하고...
어쨌든, 만약 순서를 지정해서 사용해야하는 상황이 발생했을때, OrderedDict 객체가 그 해법이 될 수 있다.
>>> from collections import OrderedDict >>> ordered_dict = OrderedDict() >>> ordered_dict['a'] = 1 >>> ordered_dict['b'] = 2 >>> ordered_dict['c'] = 3 >>> ordered_dict OrderedDict([('a', 1), ('b', 2), ('c', 3)]) |
입력한 a, b, c 순서대로 내용이 입력된 것을 알 수 있다.
기존에 있는 키에 대한 값만 업데이트하는 경우는 순서를 유지한다.
>>> ordered_dict OrderedDict([('a', 1), ('b', 2), ('c', 3)]) >>> ordered_dict['a']=4 >>> ordered_dict OrderedDict([('a', 4), ('b', 2), ('c', 3)]) |
키가 지워지면 순서를 유지하지 않는다.
>>> del ordered_dict['a'] >>> ordered_dict OrderedDict([('b', 2), ('c', 3)]) >>> ordered_dict['a']=5 >>> ordered_dict OrderedDict([('b', 2), ('c', 3), ('a', 5)]) |
'a'키를 지우고 새로 입력하자 제일 마지막으로 이동한 것을 알 수 있다.
OrderedDict에 사용할 수 있는 메서드는 두가지가 있다.
1. OrderedDict의 처음이나 마지막 값 리턴하고 삭제 : popitem()
>>> ordered_dict OrderedDict([('b', 2), ('c', 3), ('a', 5)]) >>> k, v = ordered_dict.popitem() # 인자가 없거나 last=true라고 주면 마지막 값('a',5)을 리턴하고 삭제 >>> k 'a' >>> v 5 >>> ordered_dict OrderedDict([('b', 2), ('c', 3)]) >>> k, v = ordered_dict.popitem(last=False) # 인자를 last=False로 주면 처음값('b',2)을 리턴하고 삭제 'b' >>> v 2 >>> ordered_dict OrderedDict([('c', 3)]) |
2. 키와 값을 처음이나 마지막으로 이동 : move_to_end()
>>> od = OrderedDict.fromkeys('red') # 'red'의 각 문자를 이용해 딕셔너리 생성 >>> od OrderedDict([('r', None), ('e', None), ('d', None)]) # 값이 None인 딕셔너리 생성됨. >>> od.move_to_end('r') # 'r'키값을 제일 마지막으로 이동 >>> od OrderedDict([('e', None), ('d', None), ('r', None)]) >>> od.move_to_end('r', last=False) # 'r'키값을 제일 처음으로 이동(last=False) >>> od OrderedDict([('r', None), ('e', None), ('d', None)]) |
반응형
'IT' 카테고리의 다른 글
[파이썬 기초] 파이썬 문자열(1) -문자열 생성 (0) | 2018.11.23 |
---|---|
[파이썬 기초] 스택과 큐의 기능을 한번에 deque (1) | 2018.11.23 |
[파이썬 기초] Counter를 이용한 항목 계산 (0) | 2018.11.22 |
[파이썬 기초] 딕셔너리 값 가져오기 get(), setdefault() (0) | 2018.11.21 |
[파이썬 기초] print() 함수에서 % 와 format()를 사용하여 서식에 맞게 출력(1) (1) | 2018.11.02 |