Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 람다 함수로 딕셔너리 리스트를 값 기준으로 정렬하는 방법

파이썬에서 딕셔너리로 이루어진 리스트를 특정 값(키)을 기준으로 정렬해야 할 때, 람다(lambda) 함수sorted() 함수의 key 인자로 활용하면 간단하게 해결할 수 있습니다.

아래 예제를 통해 나이(age), 이름(name) 등 다양한 조건으로 정렬하는 방법을 살펴보겠습니다.

예제 코드

from operator import itemgetter

my_list = [{ "name" : "Will", "age" : 56},
          { "name" : "Rob", "age" : 20 },
          { "name" : "Mark" , "age" : 34 },
          { "name" : "John" , "age" : 24 }]

print("나이를 기준으로 정렬한 리스트 : ")
print(sorted(my_list, key=lambda i: i['age']))

print("나이와 이름을 기준으로 정렬한 리스트 : ")
print(sorted(my_list, key=lambda i: (i['age'], i['name'])))

print("나이를 기준으로 내림차순 정렬한 리스트 : ")
print(sorted(my_list, key=lambda i: i['age'], reverse=True))

실행 결과

나이를 기준으로 정렬한 리스트 :
[{'name': 'Rob', 'age': 20}, {'name': 'John', 'age': 24}, {'name': 'Mark', 'age': 34}, {'name': 'Will',
'age': 56}]
나이와 이름을 기준으로 정렬한 리스트 :
[{'name': 'Rob', 'age': 20}, {'name': 'John', 'age': 24}, {'name': 'Mark', 'age': 34}, {'name': 'Will',
'age': 56}]
나이를 기준으로 내림차순 정렬한 리스트 :
[{'name': 'Will', 'age': 56}, {'name': 'Mark', 'age': 34}, {'name': 'John', 'age': 24}, {'name': 'Rob',
'age': 20}]

코드 설명

  • 먼저 딕셔너리 요소 여러 개를 담은 리스트를 정의하고, 콘솔에 출력하여 확인합니다.

  • sorted() 함수의 key 인자에 람다 함수를 지정하면, 각 딕셔너리에서 정렬 기준이 될 값을 추출할 수 있습니다. 위 예제에서는 i['age'], 즉 나이 값을 기준으로 오름차순 정렬했습니다.

  • 여러 조건으로 정렬하려면 람다 함수에서 튜플 형태로 두 개 이상의 키를 반환하면 됩니다. (i['age'], i['name'])처럼 작성하면 나이가 같을 때 이름 순서대로 추가 정렬됩니다.

  • 내림차순으로 정렬하려면 reverse=True 옵션을 함께 사용하면 됩니다.

  • 모든 정렬 결과가 콘솔에 출력됩니다.

참고 사항

sorted() 함수는 원본 리스트를 변경하지 않고 정렬된 새 리스트를 반환합니다. 반면 원본 리스트 자체를 정렬하고 싶다면 my_list.sort(key=lambda i: i['age'])처럼 리스트의 sort() 메서드를 사용할 수 있습니다. 또한 operator 모듈의 itemgetter('age')를 람다 대신 사용해도 동일한 결과를 얻을 수 있어 상황에 맞게 선택하면 됩니다.