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

Python sorted() 함수로 딕셔너리 리스트를 키 값 기준으로 정렬하는 방법

Python에는 반복 가능한(iterable) 객체의 요소를 지정된 순서대로 정렬해 주는 내장 함수 sorted()가 있습니다. 이 함수 하나만으로 딕셔너리로 이루어진 리스트도 손쉽게 정렬할 수 있습니다.

sorted() 함수의 기본 문법

sorted(iterable[, key][, reverse])

각 매개변수의 역할은 다음과 같습니다.

  • iterable: 정렬 대상이 되는 반복 가능한 객체입니다.
  • key: 정렬 기준이 되는 값을 반환하는 함수입니다. 각 요소에 이 함수를 적용한 결과값을 기준으로 정렬이 수행됩니다.
  • reverse: 기본값은 False이며, True로 설정하면 내림차순(큰 값부터)으로 정렬됩니다.

람다 함수를 활용한 딕셔너리 정렬

딕셔너리 리스트를 특정 키의 값 기준으로 정렬하려면, 람다(lambda) 함수를 사용해 해당 키의 값을 정렬 키로 지정하면 됩니다. 아래 예제는 학생 정보가 담긴 딕셔너리 리스트를 'name'(이름), 'age'(나이), 'marks'(점수) 키를 기준으로 각각 정렬하는 과정을 보여줍니다.

>>> dictlist=[{'name':'Rahul', 'age':23, 'marks':60}, {'name':'Anil', 'age':18, 'marks':55}, {'name':'Sunil', 'age':21, 'marks':90}]
>>> newlist=sorted(dictlist, key = lambda k:k['name'])
>>> newlist
[{'name': 'Anil', 'age': 18, 'marks': 55}, {'name': 'Rahul', 'age': 23, 'marks': 60}, {'name': 'Sunil', 'age': 21, 'marks': 90}]
>>> newlist=sorted(dictlist, key = lambda k:k['age'])
>>> newlist
[{'name': 'Anil', 'age': 18, 'marks': 55}, {'name': 'Sunil', 'age': 21, 'marks': 90}, {'name': 'Rahul', 'age': 23, 'marks': 60}]
>>> newlist=sorted(dictlist, key = lambda k:k['marks'], reverse=True)
>>> newlist
[{'name': 'Sunil', 'age': 21, 'marks': 90}, {'name': 'Rahul', 'age': 23, 'marks': 60}, {'name': 'Anil', 'age': 18, 'marks': 55}]

예제 결과 해설

  • 이름(name) 기준 오름차순 정렬: 알파벳 순서대로 Anil → Rahul → Sunil 순으로 배열됩니다.
  • 나이(age) 기준 오름차순 정렬: 나이가 어린 순서대로 18 → 21 → 23 순으로 배열됩니다.
  • 점수(marks) 기준 내림차순 정렬: reverse=True 옵션을 적용해 점수가 높은 순서대로 90 → 60 → 55 순으로 배열됩니다.

정리

sorted() 함수와 람다 함수를 조합하면 구조가 복잡한 딕셔너리 리스트도 원하는 기준에 따라 자유롭게 정렬할 수 있습니다. 만약 두 개 이상의 키를 동시에 기준으로 삼아야 한다면, 람다 함수가 튜플(tuple)을 반환하도록 작성하거나 operator.itemgetter()를 활용하는 방법도 유용합니다. 원본 리스트를 직접 변경하고 싶지 않다면 sorted()가 새로운 정렬 리스트를 반환한다는 점을 기억해 두세요.