다양한 기준으로 정렬하기

·2022년 11월 21일
0

TIL

목록 보기
39/46
post-thumbnail

🗒 문제

학생의 이름, 나이, 성적 등의 정보를 저장한 다음과 같은 students 리스트가 있다고 하자

students = [
    ("jane", 22, 'A'),
    ("dave", 32, 'B'),
    ("sally", 17, 'B'),
]

students 리스트에는 3개의 튜플이 있으며 각 튜플은 순서대로 이름, 나이, 성적에 해당하는 데이터로 이루어졌다. 이 리스트를 나이순으로 정렬하려면 어떻게 해야 할까?

📁 풀이

이 문제는 다음처럼 sorted() 함수의 key 매개변수에 itemgetter()를 적용하면 쉽게 해결할 수 있다

from operator import itemgetter

students = [
    ("jane", 22, 'A'),
    ("dave", 32, 'B'),
    ("sally", 17, 'B'),
]

result = sorted(students, key=itemgetter(1))
print(result)

itemgetter(1)은 students의 아이템인 튜플의 2번째 요소를 기준으로 정렬하겠다는 의미이다. 만약 itemgetter(2)와 같이 사용한다면 성적순으로 정렬한다

#students의 요소를 딕셔너리로 처리할 경우 
students = [
    {"name": "jane", "age": 22, "grade": 'A'},
    {"name": "dave", "age": 32, "grade": 'B'},
    {"name": "sally", "age": 17, "grade": 'B'},
]

딕셔너리일 때도 itemgetter()를 적용해 age를 기준으로 정렬한다
단, 딕셔너리로 처릴할 경우 itemgetter('age')처럼 딕셔너리의 키를 사용해야 한다 (itemgetter('age')는 딕셔너리의 키인 age를 기준으로 정렬하겠다는 의미)

from operator import itemgetter

students = [
    {"name": "jane", "age": 22, "grade": 'A'},
    {"name": "dave", "age": 32, "grade": 'B'},
    {"name": "sally", "age": 17, "grade": 'B'},
]

result = sorted(students, key=itemgetter('age'))
print(result)

출력 결과

  • operator.attrgetter()
    students 리스트의 요소가 튜플이 아닌 Student 클래스의 객체라면 다음처럼 attrgetter()를 적용하여 정렬해야 한다
from operator import attrgetter

class Student:
    def __init__(self, name, age, grade):
        self.name = name
        self.age = age
        self.grade = grade


students = [
    Student('jane', 22, 'A'),
    Student('dave', 32, 'B'),
    Student('sally', 17, 'B'),
]

result = sorted(students, key=attrgetter('age'))

attrgetter('age')는 Student 객체의 age 속성으로 정렬하겠다는 의미이다 attrgetter('grade')와 같이 사용하면 성적순으로 정렬한다

0개의 댓글