본문 바로가기

Programming/Python Tutorials

[PYTHON 3] Tutorials 38. Min, Max and Sorting Dictionaries (딕셔너리의 최솟값, 최댓값 구하기 및 정렬하기)


이번 시간에는 딕셔너리(key, value값을 가지는 형태)의 최솟값, 최댓값을 구하여 보겠습니다. 그리고 이의 정렬도 함께 살펴보려 합니다.

튜토리얼 초반부에 다룬 딕셔너리는 key, value값을 가지고 있습니다. 영어 사전을 떠올려보시면 이해하기 쉬울 것입니다. 찾고자 하는 단어가 key에 해당이되고, 해당 단어의 뜻이 value에 해당합니다. 어떤 key값에 대응하는 value값들을 가지고 있는 딕셔너리가 있다고 가정을 해 보겠습니다. 이 딕셔너리에는 많은 양의 데이터가 중구난방으로 존재하고 있습니다. 이런 무작위 데이터를 잘 정리하려고 하는데, 일반적으로 오름차순, 내림차순 등의 방식으로 정렬을 합니다. 그러나 문제는 파이썬에서 딕셔너리는 자체적으로 정렬을 할 수가 없습니다. 그럼 어떻게 해야 할까요? 다른 방법을 강구해야 합니다. 이 부분을 이번에 다루어 보고자 합니다.


주식시장에 종목이 있고, 해당 종목의 시세가 있을 것입니다. 간단히 종목(key), 시세(value) 정보를 가지고 있는 stocks라고 하는 딕셔너리를 정의해 보겠습니다.몰론 허구의 데이터입니다.

위에서 언급했듯이, 딕셔너리는 정렬을 할 수가 없습니다. 따라서 다른 함수나 메서드를 사용하여 딕셔너리 값에 접근을 하여 이 값들을 정렬하는 방식을 택해야 합니다.

그 중 지난 시간에 다룬 zip function 을 이용하여 보겠습니다.

zip() function 은 자체적으로 정렬 규칙이 있습니다. zip(첫번째 값, 두번째 값)  이렇게 있을 때, zip의 첫 번째 값에 따라 정렬을 합니다. 아래 예제를 통해 계속 보겠습니다.

stocks.values() -> 시세, stocks.keys() -> 종목명 에 해당하는 값입니다.

따라서 zip(시세, 종목명) 의 형태로 사용하면 시세에 따라서 정렬이 이루어지게 됩니다.

zip()의 첫번째 값에 의해 정렬이 이루어는데, 그 중 최솟값을 구하고자 할 때는 min()함수를 사용합니다.

그리고 그 값을 확인하기 위해 프린트로 출력을 해주겠습니다.

결과창을 확인해 보니 시세 순으로 정렬이 이루어지고, 그 중 최솟값에 해당하는 (시세,종목명) 이 출력이 되었습니다.

마찬가지로, 최댓값을 구할 때에는 max() 를 사용합니다. max()를 사용하여 결과를 확인하면 아래와 같은 결과를 보여줍니다.

이번에는 최댓값, 최솟값이 아니라 정렬을 해 보겠습니다. 이럴때에는 sorted() 를 사용하면 됩니다. 결과는 아래와 같이 시세에 따라 정렬이 이루어진 데이터를 보여주게 됩니다.

그렇다면 zip()의 첫 번째 값과 두 번째 값을 바꾸어 주면 어떻게 될까요? 서두에서도 얘기했지만, zip()은 첫 번째 값으로 정렬을 함으로, 만약 두 값을 바꾸어 주면 정렬 순서가 시세가 아니라 종목명 순서로 바뀌게 될 것입니다.

지금까지 Dictionaries의 정렬, 최솟값, 최댓값을 알아보았습니다. 주의할 점은 Dictionaries는 자체적으로 정렬을 할 수 없으므로 Dictionaries 값에 접근하여 그 값들을 정렬하는 방식을 택해야 한다는 점입니다.