파이썬 딕셔너리에 입력된 key 값과 value 값들을 정렬해야 할 때가 있습니다.
그럴 때 해결할 수 있는 방법을 사용해보려고 합니다.
각각 Key를 이용한 방법과 Value를 이용한 방법이 있습니다.
딕셔녀리는 {Key : Value}와 같은 구조를 가지고 있기 때문에 어떤 값으로 정렬을 수행할지 상황에 따라 다르기 마련이지요.
01. Key를 이용한 정렬
해결 방법은 list를 정렬할 때와 마찬가지로 sorted 함수를 사용하면 됩니다.
sorted() 함수 사용
dict = {'A' : 1, 'D' : 4, 'C' : 3, 'B' : 2} sdict = sorted(dict.items()) # items() 함수는 key-value 쌍이 tuple로 구성된 리스트가 리턴됩니다.
결과는 다음과 같이 나타납니다.
>> [('A', 1), ('B', 2), ('C', 3), ('D', 4)] |
만약 반대 순서대로(내림차순) 정렬하고 싶다면 간단하게 다음과 같이 reverse 인자값에 True를 넣어주시면 됩니다.
sorted()함수 사용 및 reverse 인자값 설정
dict = {'A' : 1, 'D' : 4, 'C' : 3, 'B' : 2} sdict = sorted(dict.items(), reverse=True) # items() 함수는 key-value 쌍이 tuple로 구성된 리스트가 리턴됩니다. # reverse 인자값에 True를 넣어주면 내림차순으로 하겠다고 설정됩니다. # reverse의 default 값은 False입니다.
결과는 다음과 같이 나타납니다.
>> [('D', 4), ('C', 3), ('B', 2), ('A', 1)] |
02. Value를 이용한 정렬
value 값은 key를 이용하는 것보다 조금 더 복잡합니다.
하지만 크게 어려울 것이 없습니다.
다음과 같이 sorted 함수를 이용하여, 인자를 더 넣어주시면 됩니다.
먼저 원래의 결과와 동일한 결과를 뽑기 위한 코드는 다음과 같습니다.
sorted() 함수 사용 및 operator를 통한 인자값 설정
import operator dict = {'A' : 1, 'D' : 4, 'C' : 3, 'B' : 2} sdict = sorted(dict.items(), key=operator.itemgetter(0)) # 인자값에 있는 key=operator.itemgetter(0)는 정렬하고자 하는 키 값을 0번째 인덱스 기준으로 하겠다는 것입니다. # 0번째 인자는 Key입니다.
결과는 다음과 같이 나타납니다.
>> [('A', 1), ('B', 2), ('C', 3), ('D', 4)] |
위의 코드를 차근차근 설명하면 다음과 같습니다.
1. {'A' : 1, 'D' : 4, 'C' : 3, 'B' : 2} 값을 2의 리스트 형태로 바꿔준다.
2. [('A', 1), ('B', 2), ('C', 3), ('D', 4)]와 같이 변경된 값 중에, 0번째(영어로 된 인자값) 부분을 기준으로 결정한다.
3. 정해진 기준을 통해 정렬을 수행한다.
4. 영어가 기준이기 때문에 영어 오름차순으로 정렬된다.
이와 같은 흐름으로 실행되면, 이제 Value를 기준으로 바꿔줄 수 있겠습니다. ><
0번째는 Key이기 때문에 1번째는 Value입니다.
즉, Value를 기준으로 정렬해주는 코드는 다음과 같이 딱 한 곳만 수정하면 됩니다.
sorted() 함수 사용 및 operator를 통한 인자값 설정
import operator dict = {'A' : 1, 'D' : 4, 'C' : 3, 'B' : 2} sdict = sorted(dict.items(), key=operator.itemgetter(1)) # 인자값에 있는 key=operator.itemgetter(1)는 정렬하고자 하는 키 값을 1번째 인덱스 기준으로 하겠다는 것입니다. # 1번째 인자는 Value입니다.
결과는 다음과 같이 나타납니다.
>> [('A', 1), ('B', 2), ('C', 3), ('D', 4)] |
생각해보니 key와 value의 순서가 같게 나오게 되네요 허허....
무튼 위와 같이 하게 되면 정렬이 완료됩니다.
'PYTHON > Python 3.x' 카테고리의 다른 글
[Python] 날짜와 시간 관련 모듈 (0) | 2019.02.06 |
---|