문제 상황:
다음과 같은 성적 데이터가 있다고 가정을 하자.
name | age | English | Math | Science |
Alice | 20 | 60 | 35 | 63 |
Cathy | 21 | 70 | 59 | 43 |
Duke | 19 | 80 | 44 | 98 |
Tommy | 17 | 65 | 80 | 56 |
Joy | 20 | 40 | 50 | 34 |
Kate | 22 | 50 | 100 | 80 |
위 데이터를 python 내에서 dictionary의 형태로 표현을 하면 아래와 같다.
• key: name, age, English, Math, Science
score_data = [
{'name':'Alice', 'age':20, 'English':60, 'Math':35 , 'Science':63},
{'name':'Cathy', 'age':21, 'English':70, 'Math':59 , 'Science':43},
{'name':'Duke' , 'age':19, 'English':80, 'Math':44 , 'Science':98},
{'name':'Tommy', 'age':17, 'English':65, 'Math':80 , 'Science':56},
{'name':'Joy' , 'age':20, 'English':40, 'Math':50 , 'Science':34},
{'name':'Kate' , 'age':22, 'English':50, 'Math':100, 'Science':80}
]
이때, 각각의 key값에 따라 정렬(sort)을 하려고 한다.
해결방법
sorted()
함수를 사용하여 정렬한다. 이때, key=
옵션을 사용하여 정렬하며, 다음과 같이 두 가지 방법을 이용할 수 있다.
(1) lambda 함수 이용
(2) operator.itemgetter() 사용
1. lambda 함수 이용
1) 키 값 하나만을 기준으로 정렬하는 경우
sorted(<dict_list>, key = lambda x: x["key_name"])
• <dict_list> : 정렬하고자 하는 딕셔너리 데이터 셋
• "key_name": 정렬하려고 기준을 잡은 키의 이름, ex) 위의 예제의 경우, "name", 'age', 'English', 'Math', 'Science'
• 오름차순으로 정렬하며, 내림차순으로 정렬하는 경우, reverse=True
옵션을 사용한다.
2) 정렬할 key 값이 여러 개인 경우
sorted(<dict_list>, key = lambda x: (x["key_name_1"], x["key_name_2"]))
• key_name_1을 먼저 오름차순으로 정렬 후, key_name_2로 오름차순으로 정렬함
• key_name_1을 내림차순을 하는 경우, -x["key_name_1"]
으로 "-"를 붙여줌
2. operator.itemgetter() 사용
1) 정렬할 key 값이 하나인 경우
import operator
sorted(<dict_list>, key = operator.itemgetter("<key_name>"))
2) 정렬할 key 값들이 여러 개인 경우
import operator
sorted(<dict_list>, key = operator.itemgetter("<key_name_1>", "<key_name_2>"))
ex - 1) 'Math' 키로 오름차순으로 정렬하는 경우
>>> sorted(score_data, key = lambda x: x['Math'])
[{'name': 'Alice', 'age': 20, 'English': 60, 'Math': 35, 'Science': 63},
{'name': 'Duke', 'age': 19, 'English': 80, 'Math': 44, 'Science': 98},
{'name': 'Joy', 'age': 20, 'English': 40, 'Math': 50, 'Science': 34},
{'name': 'Cathy', 'age': 21, 'English': 70, 'Math': 59, 'Science': 43},
{'name': 'Tommy', 'age': 17, 'English': 65, 'Math': 80, 'Science': 56},
{'name': 'Kate', 'age': 22, 'English': 50, 'Math': 100, 'Science': 80}]
Reference:
[1] www.geeksforgeeks.org/ways-sort-list-dictionaries-values-python-using-lambda-function/
[2] hello-bryan.tistory.com/43
'프로그래밍 언어 > Python 3' 카테고리의 다른 글
[Python] set 자료형 정리 (0) | 2021.01.01 |
---|---|
[Python] 리스트 중복 제거 (순서 유지 X, 순서 유지 O) (0) | 2020.12.29 |
[Python] Dictionary sorting by key or value (0) | 2020.12.19 |
[Jupyter] Jupyter lab install (0) | 2020.07.09 |
[anaconda] Ubuntu에서 PATH 설정 (0) | 2020.03.31 |
댓글