딕셔너리를 내림차순으로 정렬하는 방법에 대해서 알아보겠습니다.

1. key를 내림차순으로 정렬

아래 코드는 딕셔너리 my_dict의 key를 내림차순으로 정렬합니다.

sorted 함수는 아래와 같은 인자를 받아서 딕셔너리를 정렬합니다. 여기서 key 인자는, 딕셔너리의 key-value 값 중에 어떤 것을 사용하여 정렬할 것인지 의미하는 것으로, x[0]은 key를 의미하고, x[1]은 value를 의미합니다.

  • sorted(item, key)는 item을 key를 오름차순으로 정렬
  • sorted(item, key, reverse=True)는 item을 key를 내림차순으로 정렬
  • 람다식 key=lambda x: x[0]는 딕셔너리의 key 값을 사용하여 정렬하라는 의미
my_dict = {'apple': 3, 'banana': 1, 'cherry': 2}
sorted_dict = dict(sorted(my_dict.items(), key=lambda x: x[0], reverse=True))
print(sorted_dict)

Output:

{'cherry': 2, 'banana': 1, 'apple': 3}

2. value를 내림차순으로 정렬

다음은 value를 내림차순으로 정렬하는 예제입니다.

  • reverse=True로 내림차순 정렬
  • 람다식 key=lambda x: x[1]는 딕셔너리의 value 값을 사용하여 정렬하라는 의미
my_dict = {'apple': 3, 'banana': 1, 'cherry': 2}
sorted_dict = dict(sorted(my_dict.items(), key=lambda x: x[1], reverse=True))
print(sorted_dict)

Output:

{'apple': 3, 'cherry': 2, 'banana': 1}

3. 커스텀 객체를 갖고 있는 딕셔너리 내림차순 정렬

커스텀 객체를 key로 갖고 있는 딕셔너리는 어떻게 정렬해야 할까요?

sorted()에 전달되는 key 인자가 어떤 값을 정렬하는데 사용할지를 의미하는데, 여기서 커스텀 객체의 변수를 지정하면 됩니다.

  • 아래 예제에서 key=lambda x: x[0].name 는 커스텀 객체의 name 값으로 정렬하겠다는 의미
  • x[0]은 딕셔너리 중에 key인 CustomObject를 의미하며, name은 CustomObject의 name 변수 의미
  • reverse=True : 내림차순 정렬
class CustomObject:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f"{self.name}: {self.age}"

# CustomObject를 key로 갖는 딕셔너리 생성
custom_dict = {
    CustomObject("Alex", 42): "apple",
    CustomObject("Jone", 18): "banana",
    CustomObject("Doe", 35): "cherry",
}

# 딕셔너리의 key인 CustomObject의 name을 내림차순으로 정렬
sorted_custom_dict = dict(sorted(custom_dict.items(), key=lambda x: x[0].name, reverse=True))

# 정렬된 딕셔너리 출력
for key, value in sorted_custom_dict.items():
    print(f"{key}: {value}")

Output:

Jone: 18: banana
Doe: 35: cherry
Alex: 42: apple

커스텀 객체의 age를 기준으로 내림차순 정렬

커스텀 객체의 age를 기준으로 내림차순 정렬하려면, key에 age를 지정하면 됩니다.

  • key=lambda x: x[0].age : CustomObject의 age로 정렬
class CustomObject:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f"{self.name}: {self.age}"

# CustomObject를 key로 갖는 딕셔너리 생성
custom_dict = {
    CustomObject("Alex", 42): "apple",
    CustomObject("Jone", 18): "banana",
    CustomObject("Doe", 35): "cherry",
}

# 딕셔너리의 key인 CustomObject의 name을 내림차순으로 정렬
sorted_custom_dict = dict(sorted(custom_dict.items(), key=lambda x: x[0].age, reverse=True))

# 정렬된 딕셔너리 출력
for key, value in sorted_custom_dict.items():
    print(f"{key}: {value}")

Output:

Alex: 42: apple
Doe: 35: cherry
Jone: 18: banana