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

파이썬에서 딕셔너리 리스트를 값 기준으로 정렬하는 방법

딕셔너리(dictionary)로 구성된 리스트는 실무에서 매우 자주 다루게 되는 자료구조입니다. 이번 글에서는 이러한 딕셔너리 리스트를 특정 키(key)의 값을 기준으로 정렬하는 방법을 살펴봅니다.

예제에 사용된 각 딕셔너리에는 nameroll이라는 두 개의 키가 있습니다. 파이썬의 내장 함수인 sorted()lambda 식을 조합하면 별도의 정렬 로직을 직접 작성하지 않고도 원하는 기준으로 손쉽게 정렬할 수 있습니다.

예제 코드

# 딕셔너리 리스트 초기화 
my_list1 = [{ "name" : "Adwaita", "roll" : 100},
{ "name" : "Aadrika", "roll" : 234 },
{ "name" : "Sakya" , "roll" : 23 }]
print ("roll 기준으로 정렬된 리스트: ")
print (sorted(my_list1, key = lambda i: i['roll']) )
print ("\r")
print ("roll과 name 기준으로 정렬된 리스트: ")
print (sorted(my_list1, key = lambda i: (i['roll'], i['name'])) )
print ("\r")
print ("roll 기준 내림차순으로 정렬된 리스트: ")
print (sorted(my_list1, key = lambda i: i['roll'],reverse=True) )

실행 결과

roll 기준으로 정렬된 리스트: 
[{'name': 'Sakya', 'roll': 23}, {'name': 'Adwaita', 'roll': 100}, {'name': 'Aadrika', 'roll': 234}]
roll과 name 기준으로 정렬된 리스트: 
[{'name': 'Sakya', 'roll': 23}, {'name': 'Adwaita', 'roll': 100}, {'name': 'Aadrika', 'roll': 234}]
roll 기준 내림차순으로 정렬된 리스트: 
[{'name': 'Aadrika', 'roll': 234}, {'name': 'Adwaita', 'roll': 100}, {'name': 'Sakya', 'roll': 23}]

코드 설명

1. 단일 키 기준 정렬: key=lambda i: i['roll']은 각 딕셔너리에서 'roll' 키의 값을 꺼내어 해당 값을 기준으로 정렬하도록 지시합니다. 그 결과 roll 값이 작은 순서대로(오름차순) 리스트가 정렬됩니다.

2. 복수 키 기준 정렬: key=lambda i: (i['roll'], i['name'])처럼 튜플(tuple) 형태로 여러 키를 전달하면 먼저 roll 값으로 정렬되고, roll 값이 같은 항목끼리는 name 순서로 정렬됩니다.

3. 내림차순 정렬: sorted() 함수에 reverse=True 옵션을 추가하면 정렬 순서가 반전되어 큰 값부터 차례로 출력됩니다.

참고로 sorted()는 원본 리스트를 변경하지 않고 새롭게 정렬된 리스트를 반환합니다. 만약 원본 리스트 자체를 제자리에서 정렬하고 싶다면 my_list1.sort(key=lambda i: i['roll'])처럼 리스트의 sort() 메서드를 사용하면 됩니다.