문제상황: 딕셔너리에 입력된 Key 또는 value 값으로 sort를 해야하는 경우
■ 예제에서 사용할 딕셔너리
※ Dictionary의 구조: {key:Value}
example = {"tommy": 95, "Timmy": 60, "Aimee": 58, "Carmen": 20, "Sam": 77}
1. Key 을 통한 sorting
딕셔너리의 key값과 value값들을 정렬할 때 모두 sorted() 메소드를 이용한다.
• sorted()
내부에 별도로 key값을 설정하지 않을 경우, 기본적으로 key값을 기준으로 정렬함
• key 값을 오름차순 순서로 sorting 한다.
>>> sorted(example.items())
[('Aimee', 58), ('Carmen', 20), ('Sam', 77), ('Timmy', 60), ('tommy', 95)]
• 내림차순으로 sorting 하는 경우: reverse=True
옵션을 이용함
sorted(example.items(), reverse=True)
>>> [('tommy', 95), ('Timmy', 60), ('Sam', 77), ('Carmen', 20), ('Aimee', 58)]
2. value 값을 통한 sorting
Dictionary 내의 value값을 기준으로 sorting을 하기 위해선, sorted()
함수의 "key=" 옵션을 사용해야한다. 이때, 해당 옵션에서는 크게 두 가지 방식을 사용할 수 있다; lambda 함수를 통한 방법과 operator 모듈을 통한 방법
• <dictionary>.items()
을 사용하여 딕셔너리를 튜플의 형태로 변환
• 동일하게 내림차순으로 정렬하는 경우에는 "reverse=True" 옵션을 적용함
• 옵션 "key="를 사용하여, 배열 내의 몇 번째 원소를 기준으로 기준을 삼아 정렬할 것인지를 정함
1) lambda 함수 이용[2]
>>> example.items()
dict_items([('tommy', 95), ('Timmy', 60), ('Aimee', 58), ('Carmen', 20), ('Sam', 77)])
>>> sorted(example.items(),key=(lambda x: x[1]), reverse=True)
[('tommy', 95), ('Sam', 77), ('Timmy', 60), ('Aimee', 58), ('Carmen', 20)]
• 만일 lambda x: x[0]
을 사용할 경우, key(또는 첫번째 원소)를 기준으로 정렬
>>> sorted(example.items(),key=(lambda x: x[0]), reverse=True)
[('tommy', 95), ('Timmy', 60), ('Sam', 77), ('Carmen', 20), ('Aimee', 58)]
2) operator 모듈을 통한 인자 설정 [1]
• key=
옵션에 operator.itemgetter(n)
을 이용한다. (n: nth index)
• n = 0일 때, dictionary의 key값을 기준으로 정렬
>>> import operator
>>> sorted(example.items(),key=operator.itemgetter(0))
[('Aimee', 58), ('Carmen', 20), ('Sam', 77), ('Timmy', 60), ('tommy', 95)]
• n = 1 일 때, dictionary의 value 값을 기준으로 정렬
>>> import operator
>>> sorted(example.items(),key=operator.itemgetter(1))
[('Carmen', 20), ('Aimee', 58), ('Timmy', 60), ('Sam', 77), ('tommy', 95)]
Reference:
[1] kkamikoon.tistory.com/138
[2] gomguard.tistory.com/127
[3] stackabuse.com/how-to-sort-dictionary-by-value-in-python/
'프로그래밍 언어 > Python 3' 카테고리의 다른 글
[Python] set 자료형 정리 (0) | 2021.01.01 |
---|---|
[Python] 리스트 중복 제거 (순서 유지 X, 순서 유지 O) (0) | 2020.12.29 |
[Python 3] dictionary list sorting (0) | 2020.12.20 |
[Jupyter] Jupyter lab install (0) | 2020.07.09 |
[anaconda] Ubuntu에서 PATH 설정 (0) | 2020.03.31 |
댓글