콘텐츠로 건너뛰기

파이썬에서 값에 따라 사전 정렬하는 방법 이해하기

[

파이썬 딕셔너리 값을 기준으로 정렬하기

파이썬 딕셔너리를 가지고 있지만 키-값 쌍을 정렬하고 싶을 것입니다. 아마도 딕셔너리를 sorted() 함수에 전달해보았지만 예상한 결과를 얻지 못했을 것입니다. 이 튜토리얼에서 파이썬에서 딕셔너리를 정렬하고자 할 때 필요한 모든 것을 알아보겠습니다.

이 튜토리얼에서는 다음과 같은 내용을 다룰 것입니다:

  • sorted() 함수 사용 방법 복습하기
  • 딕셔너리 **뷰(view)**를 통해 반복(iterate) 하는 방법 배우기
  • 정렬하는 동안 딕셔너리가 리스트로 캐스트되는 방법 이해하기
  • 값을, 키, 또는 중첩 속성별로 딕셔너리를 정렬하려면 정렬 키(sort key) 를 지정하는 방법 배우기
  • 딕셔너리를 다시 구축하기 위한 딕셔너리 컴프리헨션(comprehensions) 및 dict() 생성자(constructor) 검토하기
  • 키-값 데이터에 대한 대체 데이터 구조 검토하기

이 과정에서 timeit 모듈을 사용하여 코드를 시간화하여 다양한 키-값 데이터 정렬 방법을 비교할 수 있습니다. 정렬된 딕셔너리가 실제로 가장 좋은 선택인지 고려하기 위해 일반적으로 사용되지 않는 패턴임을 고려해야 합니다.

처음으로, 딕셔너리를 정렬하기 전에 몇 가지 기본 지식을 배우겠습니다.

파이썬에서 딕셔너리 정렬 재발견

이전에는 순서가 지정된 딕셔너리를 데이터 구조로 유지하기 위해 다음과 같은 많은 방법을 사용했습니다:

그러나 Python 3.6 이상의 버전에서는 딕셔너리가 순서를 유지하기 때문에 이러한 방법들은 더 이상 필요하지 않습니다. 대신에 sorted() 함수를 사용하여 키 또는 값으로 딕셔너리를 정렬할 수 있습니다.

자세한 내용은 아래의 예제 코드와 함께 설명하겠습니다.

sorted() 함수 사용하기

sorted() 함수는 파이썬의 내장 함수로 사용 가능한 많은 데이터 구조를 정렬하는 데 사용됩니다. 이 함수는 반복 가능한 객체를 입력으로 받고 정렬된 새로운 리스트를 반환합니다.

딕셔너리는 기본적으로 키로 정렬됩니다. 다음은 sorted() 함수를 사용하여 딕셔너리를 키로 정렬하는 간단한 예제입니다:

data = {'b': 3, 'a': 2, 'c': 1}
sorted_data = sorted(data)
print(sorted_data)

출력 결과:

['a', 'b', 'c']

위의 코드에서 sorted(data)는 딕셔너리 data의 키를 정렬한 새로운 리스트를 반환합니다. 출력 결과에서 볼 수 있듯이 알파벳순으로 정렬되었습니다.

그러나 sorted() 함수는 딕셔너리의 값을 정렬하는 데 사용할 수 없습니다. 그 이유는 딕셔너리는 {key: value} 형식의 키-값 쌍으로 구성되기 때문입니다. 값을 정렬하기 위해서는 우선 키-값 쌍을 분리해야 합니다.

아래의 예제 코드에서는 items() 메서드를 사용하여 딕셔너리의 키-값 쌍을 튜플 형태로 반환합니다. 그 다음 sorted() 함수를 사용하여 튜플을 정렬합니다.

data = {'b': 3, 'a': 2, 'c': 1}
sorted_data = sorted(data.items())
print(sorted_data)

출력 결과:

[('a', 2), ('b', 3), ('c', 1)]

위의 코드에서 data.items()는 딕셔너리 data의 키-값 쌍을 튜플 형태로 반환합니다. 그리고 sorted() 함수는 이러한 튜플을 정렬한 새로운 리스트를 반환합니다. 출력 결과에서는 키-값 쌍이 정렬되어 있음을 확인할 수 있습니다.

딕셔너리의 값을 정렬하기 위해서는 sorted() 함수의 key 매개변수를 사용하여 정렬 기준을 지정해야 합니다. key 매개변수에는 정렬에서 값을 기준으로 사용할 함수를 전달해야 합니다.

아래의 예제 코드에서는 lambda 함수를 사용하여 딕셔너리의 값을 기준으로 정렬합니다.

data = {'b': 3, 'a': 2, 'c': 1}
sorted_data = sorted(data.items(), key=lambda x: x[1])
print(sorted_data)

출력 결과:

[('c', 1), ('a', 2), ('b', 3)]

위의 코드에서 lambda x: x[1]은 튜플의 두 번째 값을 기준으로 정렬하는 람다 함수입니다. key 매개변수에 이 람다 함수를 전달하여 딕셔너리의 값을 기준으로 정렬합니다. 출력 결과에서 볼 수 있듯이 값에 따라 정렬된 튜플이 반환됩니다.

이와 같은 방식으로 딕셔너리를 키와 값을 모두 사용하여 정렬할 수도 있습니다. 예를 들어, 다음과 같은 딕셔너리를 생각해보겠습니다:

data = {'b': 3, 'a': 2, 'c': 1}

이 딕셔너리를 키의 내림차순으로, 값의 오름차순으로 정렬해 보겠습니다. 아래의 예제 코드에서는 sorted() 함수의 key 매개변수에 두 개의 람다 함수를 전달하여 정렬 기준을 지정합니다.

data = {'b': 3, 'a': 2, 'c': 1}
sorted_data = sorted(data.items(), key=lambda x: (-x[0], x[1]))
print(sorted_data)

출력 결과:

[('c', 1), ('b', 3), ('a', 2)]

위의 코드에서 (-x[0], x[1])는 두 개의 람다 함수를 사용하여 키의 내림차순과 값의 오름차순으로 정렬합니다. key 매개변수에 이 람다 함수를 전달하여 딕셔너리를 정렬합니다. 출력 결과에서 보듯이 키와 값에 따라 정렬된 튜플이 반환됩니다.

이렇게하면 딕셔너리를 특정 기준에 따라 정렬할 수 있습니다. sorted() 함수와 람다 함수를 조합하여 딕셔너리를 원하는 대로 정렬할 수 있습니다. 이것은 파이썬에서 매우 유용한 기능 중 하나입니다.

정리

이 튜토리얼에서는 파이썬에서 딕셔너리를 값으로 정렬하는 방법에 대해 배웠습니다. 다음과 같은 내용들을 다루었습니다:

  • sorted() 함수를 사용하여 딕셔너리를 정렬하는 방법
  • 딕셔너리 뷰를 사용하여 반복하는 방법
  • 딕셔너리의 정렬을 위해 리스트로 캐스트되는 방법
  • 정렬 키를 지정하여 값, 키 또는 중첩 속성으로 딕셔너리를 정렬하는 방법
  • 딕셔너리 컴프리헨션과 dict() 생성자를 사용하여 딕셔너리를 재구성하는 방법
  • 키-값 데이터에 대한 대체 데이터 구조를 고려하는 방법

이러한 내용들을 살펴보면서 코드 예제와 함께 자세한 설명을 제공했습니다. 이 튜토리얼을 통해 파이썬에서 딕셔너리를 정렬하는 방법을 숙달할 수 있을 것입니다.