파이썬에서 값 기준으로 딕셔너리 리스트 정렬하기
이 글에서는 파이썬(Python)에서 특정 값을 기준으로 딕셔너리 리스트를 정렬하는 방법을 배웁니다. 별도의 외부 라이브러리 설치 없이 파이썬 내장 함수인 sorted()만으로 손쉽게 구현할 수 있습니다.
딕셔너리 리스트 정렬 단계
값을 기준으로 딕셔너리 리스트를 정렬하려면 아래 단계를 따르면 됩니다.
- 딕셔너리가 담긴 리스트와 정렬 기준이 될 키(key)를 sorted() 함수에 전달합니다.
- 키는 두 가지 방식으로 지정할 수 있습니다.
- 1. lambda 함수 사용
- 2. itemgetter 메서드 사용
- 키는 두 가지 방식으로 지정할 수 있습니다.
그럼 예제를 통해 하나씩 살펴보겠습니다.
1. lambda 함수로 정렬하기
## 딕셔너리 리스트
dicts = [
{"name" : "John", "salary" : 10000},
{"name" : "Emma", "salary" : 30000},
{"name" : "Harry", "salary" : 15000},
{"name" : "Aslan", "salary" : 10000}
]
## 'lambda' 함수를 사용해 위 리스트를 정렬합니다
## 'sorted' 메서드에 'reverse=True'를 전달하면 내림차순 정렬도 가능합니다
print(sorted(dicts, key = lambda item: item['salary']))위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
[{'name': 'John', 'salary': 10000}, {'name': 'Aslan', 'salary': 10000}, {'name': 'Harry', 'salary': 15000}, {'name': 'Emma', 'salary': 30000}]출력 결과를 보면 salary(급여) 값을 기준으로 오름차순 정렬된 것을 확인할 수 있습니다. 참고로 같은 값(10000)을 가진 항목들의 원래 순서가 유지되는데, 이는 파이썬의 정렬이 안정적(stable)이기 때문입니다. 만약 내림차순으로 정렬하고 싶다면 아래처럼 reverse=True 옵션을 추가하면 됩니다.
print(sorted(dicts, key = lambda item: item['salary'], reverse=True))
2. itemgetter 메서드로 정렬하기
itemgetter를 이용한 정렬 방식은 앞서 살펴본 lambda 방식과 처리 과정이 거의 동일합니다. 차이점이라면 정렬 기준이 될 값을 itemgetter 메서드로 전달한다는 것뿐입니다. operator 모듈에서 itemgetter를 먼저 임포트해야 한다는 점에 유의하세요.
## operator 모듈에서 itemgetter를 임포트합니다
from operator import itemgetter
## 딕셔너리 리스트
dicts = [
{"name" : "John", "salary" : 10000},
{"name" : "Emma", "salary" : 30000},
{"name" : "Harry", "salary" : 15000},
{"name" : "Aslan", "salary" : 10000}
]
## 'itemgetter'를 사용해 위 리스트를 정렬합니다
print(sorted(dicts, key = itemgetter('salary')))실행 결과
위 프로그램을 실행하면 다음과 같은 결과를 얻습니다.
[{'name': 'John', 'salary': 10000}, {'name': 'Aslan', 'salary': 10000}, {'name': 'Harry', 'salary': 15000}, {'name': 'Emma', 'salary': 30000}]lambda vs itemgetter, 무엇을 사용해야 할까?
두 방법 모두 동일한 결과를 출력하지만, 상황에 따라 장단점이 있습니다.
- lambda: 별도의 임포트가 필요 없어 간편하며, 여러 키를 조합하거나 조건부 로직을 추가하는 등 복잡한 정렬에도 유연하게 대응할 수 있습니다.
- itemgetter: C로 구현되어 있어 대량의 데이터를 정렬할 때 약간 더 나은 성능을 보이며,
itemgetter('salary', 'name')처럼 여러 키를 동시에 지정해 다중 조건 정렬도 간단히 처리할 수 있습니다.
간단한 정렬에는 lambda를, 성능이 중요하거나 다중 키 정렬이 필요한 경우에는 itemgetter를 사용하는 것이 좋습니다.