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

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

딕셔너리(dictionary)는 순서가 없는 자료 구조로, 키(key)와 값(value)을 매핑하여 서로 연관된 데이터를 쌍 형태로 저장합니다.

파이썬의 sorted() 메서드를 사용하면 딕셔너리의 내용을 값 기준으로 정렬할 수 있습니다. 예를 들어 커피 메뉴의 인기 순위를 매기고 싶을 때 sorted() 메서드를 활용할 수 있습니다. 이 글에서는 sorted() 메서드의 동작 원리와 이를 활용해 딕셔너리를 정렬하는 방법을 자세히 살펴보겠습니다.

파이썬 sorted() 함수 기본 개념

파이썬의 내장 함수인 sorted()는 리스트, 튜플, 딕셔너리처럼 반복 가능한(iterable) 객체를 정렬할 때 사용됩니다. 이 함수는 지정된 객체의 항목들을 정렬한 뒤, 새롭게 정렬된 값을 담은 새로운 객체를 생성합니다.

sorted() 메서드의 기본 문법은 다음과 같습니다:

sorted(object, key, reverse)

이 메서드는 세 가지 매개변수를 받습니다:

  • object: 정렬하려는 반복 가능한 객체 (필수)
  • key: 사용자 지정 정렬 작업을 수행할 수 있는 함수 (선택)
  • reverse: 내림차순 정렬 여부를 지정 (선택)

object만 필수 매개변수입니다. 선택 사항인 keyreverse 매개변수를 사용하지 않으면, 파이썬은 자동으로 오름차순으로 정렬합니다.

참고: sort()sorted()의 차이점, 그리고 key 매개변수의 활용법이 궁금하다면 관련 파이썬 정렬 튜토리얼을 함께 참고하시면 좋습니다.

간단한 예제를 통해 sorted() 메서드의 동작 방식을 확인해 보겠습니다.

커피숍을 운영 중이며, '커피 클럽'(멤버십) 고객 명단을 가나다순으로 조회하고 싶다고 가정해 보겠습니다. 이미 고객 목록은 있지만 가입일 순으로 정렬되어 있습니다. 다음 코드를 사용하면 목록을 정렬할 수 있습니다:

customers = ['Kaley Fernandez', 'Darius Rowland', 'Isaac Borthwick', 'Alexandria Kidd']

sorted_customers = sorted(customers)

print(sorted_customers)

이 코드는 customers 리스트를 정렬하여 다음과 같은 결과를 반환합니다:

['Alexandria Kidd', 'Darius Rowland', 'Isaac Borthwick', 'Kaley Fernandez']

코드 첫 번째 줄에서 고객 이름을 저장하는 리스트 customers를 선언합니다. 그다음 sorted() 메서드로 고객 이름 목록을 오름차순으로 정렬한 뒤, 그 결과를 sorted_customers라는 새 리스트에 저장합니다. 마지막으로 print() 함수를 사용해 정렬된 새 목록을 콘솔에 출력합니다.

딕셔너리를 값 기준으로 정렬하기

딕셔너리를 키-값 쌍 기준으로 정렬하고 싶다면 items()sorted() 두 함수를 함께 사용하면 됩니다.

items() 함수는 딕셔너리의 항목들을 가져오는 역할을 합니다. 이 함수를 sorted() 함수 및 사용자 지정 key 매개변수와 조합하면 딕셔너리를 값 기준으로 정렬할 수 있습니다. 두 가지 예제를 통해 살펴보겠습니다.

예제 1: 내림차순 정렬

다시 커피숍 예시로 돌아가 보겠습니다. 지난 한 달간 메뉴별 주문 수량을 저장한 딕셔너리가 있다고 가정해 봅시다. 지난달 가장 인기 있는 커피가 무엇인지 확인하기 위해, 주문 딕셔너리를 값 기준 내림차순으로 정렬하기로 했습니다.

딕셔너리 내용을 값 기준으로 정렬하는 프로그램은 다음과 같습니다:

orders = {
	'cappuccino': 54,
	'latte': 56,
	'espresso': 72,
	'americano': 48,
	'cortado': 41
}

sort_orders = sorted(orders.items(), key=lambda x: x[1], reverse=True)

for i in sort_orders:
	print(i[0], i[1])

이 코드는 다음과 같은 결과를 출력합니다:

espresso 72
latte 56
cappuccino 54
americano 48
cortado 41

코드가 다소 복잡하므로 하나씩 나누어 살펴보겠습니다.

코드 시작 부분에서 커피 이름을 로, 판매 수량을 으로 저장하는 orders라는 딕셔너리를 정의합니다.

그다음 sorted() 메서드를 사용해 orders 딕셔너리를 값 기준으로 정렬합니다. 각 매개변수의 역할은 아래 표와 같습니다:

매개변수설명
objectorders.items()'orders' 딕셔너리의 모든 항목을 참조합니다. 단순히 'orders'만 사용하면 개별 값을 얻기 위해 인덱스 위치를 참조해야 하지만, orders.items()를 사용하면 항목들이 담긴 반복 가능한 리스트가 생성됩니다.
keykey=lambda x: x[1]딕셔너리를 값 기준으로 정렬할 수 있게 해주는 정렬 기준입니다. 이름 없는 함수인 람다(lambda) 함수의 대표적인 활용 예시입니다.
reversereverse=True데이터를 내림차순으로 정렬하도록 지정합니다.

마지막으로 for 루프를 생성하여 sort_orders에 담긴 각 항목을 순회하면서, 지정한 순서대로 키 이름과 값을 출력합니다.

예제 2: 오름차순 정렬

반대로 커피숍에서 가장 인기가 없는 음료를 찾고 싶다면, 위 코드에서 reverse=True 매개변수만 제거하면 됩니다. 코드 예시는 다음과 같습니다:

orders = {
	'cappuccino': 54,
	'latte': 56,
	'espresso': 72,
	'americano': 48,
	'cortado': 41
}

sort_orders = sorted(orders.items(), key=lambda x: x[1])

for i in sort_orders:
	print(i[0], i[1])

코드를 실행하면 다음과 같은 결과가 출력됩니다:

cortado 41
americano 48
cappuccino 54
latte 56
espresso 72

실행 결과, 지난 한 달간 주문 수량을 기준으로 오름차순으로 정렬된 항목 목록이 반환된 것을 확인할 수 있습니다.

리스트 컴프리헨션(List Comprehension) 활용하기

리스트 컴프리헨션을 사용해서도 딕셔너리 내용을 값 기준으로 정렬할 수 있습니다. 리스트 컴프리헨션은 파이썬에서 리스트를 간결하게 생성하는 기법으로, 더 복잡한 정렬 로직을 작성할 때 코드를 크게 절약해 줍니다.

리스트 컴프리헨션을 사용해 커피 주문을 주문 수량 기준 오름차순으로 정렬하는 코드는 다음과 같습니다:

orders = {
	'cappuccino': 54,
	'latte': 56,
	'espresso': 72,
	'americano': 48,
	'cortado': 41
}

[print(key, value) for (key, value) in sorted(orders.items(), key=lambda x: x[1])]

코드를 실행하면 다음과 같은 결과가 출력됩니다:

cortado 41
americano 48
cappuccino 54
latte 56
espresso 72

실행 결과는 앞서 orders 딕셔너리를 오름차순으로 정렬했던 예제와 동일합니다. 다만 이번에는 sort_orders 변수를 정의하고 별도의 for 루프를 작성하는 대신, 리스트 컴프리헨션 기법으로 한 줄의 코드로 처리했습니다.

위에서 만든 리스트 컴프리헨션은 리스트의 각 항목을 오름차순으로 정렬한 뒤, 각 딕셔너리 항목의 키와 값을 콘솔에 차례로 출력합니다.

마무리

파이썬에서 딕셔너리를 다룰 때 값 기준 정렬은 매우 자주 사용되는 작업입니다. sorted() 메서드를 활용하면 필요에 따라 데이터를 유연하게 정렬할 수 있습니다.

이 글에서는 예제와 함께 keyreverse 매개변수의 사용법을 포함하여, 파이썬에서 sorted() 메서드로 딕셔너리를 값 기준으로 정렬하는 방법을 알아보았습니다.

이제 여러분도 프로처럼 딕셔너리를 값 기준으로 정렬할 준비가 되었습니다!