파이썬 딕셔너리에 입력된 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

+ Recent posts