학생의 이름, 나이, 성적 등의 정보를 저장한 다음과 같은 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)
출력 결과
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')와 같이 사용하면 성적순으로 정렬한다