[Python] 딕셔너리 내림차순 정렬
June 30, 2024
딕셔너리를 내림차순으로 정렬하는 방법에 대해서 알아보겠습니다.
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