Python 객체 리스트 정렬 방법 2가지

클래스를 이용해서 만든 객체를 리스트로 담고 해당 리스트를 정렬하고 싶을 때 어떻게 할 수 있을까요? Python 객체 리스트 정렬 방법을 살펴보겠습니다.

Python 객체 리스트 정렬 방법

딕셔너리로 된 리스트를 정리하는 방법에 대해서는 Python 딕셔너리 리스트 정렬 방법 2가지에서 자세하 다루어 놓았습니다. 이번에는 클래스를 이용한 객체 리스트를 정렬하려면 어떻게 해야 하는지 살펴보겠습니다.

lambda 식 활용 방법

우선 User 클래스를 이용해서 인스턴스 객체를 users 리스트에 넣어주겠습니다. 그리고 sorted 함수를 이용해서 나이를 내림차순으로 정렬해 보도록 하겠습니다. 라인 17을 보면 lambda 식 내에서 user.age로 클래스 멤버변수 age에 간단히 접근할 수 있습니다.

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


users = [
    User('David', 29),
    User('Sarah', 34),
    User('John', 21),
    User('David', 53),
    User('Kevin', 38),
    User('David', 38),
    User('Abraham', 21),
]

sorted_users = sorted(users, key=lambda user: user.age, reverse=True)

for user in sorted_users:
    print(user.__dict__)
Python

위의 코드를 실행한 결과는 아래와 같습니다.

그림 1. Python 객체 리스트 정렬 결과
그림 1. Python 객체 리스트 정렬 결과

이번에는 또 다른 방법을 알아보도록 하겠습니다.

operator.attrgetter() 활용방법

딕셔너리 항목으로 구성된 리스트를 정렬할 때에는 operator.itemgetter() 함수를 이용해서 정렬하는 방법이 있었습니다. 클래스로 생성한 객체의 멤버변수에 엑세스하여 정렬하고 싶을 때에는 operator.attrgetter() 함수를 이용해서 정렬하면 됩니다. 아래 코드와 같이 작성하면 위와 동일한 결과를 얻을 수 있습니다.

sorted_users = sorted(users, key=attrgetter('age'), reverse=True)
Python

코드의 실행결과는 위와 동일하므로 생략합니다.

오름차순 내림차순 복합 정렬

오름차순 내림차순 복합 정렬과 관련된 내용은 Python 딕셔너리 리스트 정렬 방법 2가지에서 다루었습니다. 클래스로 생성한 객체 정렬이라고 해서 정렬 방식 자체가 크게 다르지는 않으니 참고하시면 도움이 될 것입니다.

관련 자료

Python의 Sorting Techniques 문서를 참고했습니다.

같이 읽으면 좋은 글

Leave a Comment