파이썬 딕셔너리 정렬: 설명과 예제
파이썬 딕셔너리(Dictionary)는 키-값 쌍으로 데이터를 저장하는 유용한 자료구조입니다.
하지만 딕셔너리는 기본적으로 순서를 가지고 있지 않아서, 딕셔너리의 데이터를 특정 순서로 정렬해야 하는 경우가 있습니다.
이번 포스팅에서는 파이썬 딕셔너리의 정렬 방법에 대해 알아보겠습니다. 구체적인 내용은 다음과 같습니다.
- 키 (key) 기준 정렬
- 값 (value) 기준 정렬 (lambda 함수)
- value 여러개 혹은 내림차순 정렬
- 다중 딕셔너리 정렬
- 파이썬 리스트 안에 딕셔너리 정렬
- 딕셔너리 정렬 출력
1. 키 (key) 기준 정렬
딕셔너리의 키를 기준으로 정렬하려면 내장 함수인 sorted()
를 사용할 수 있습니다.
키를 기준으로 딕셔너리를 정렬하면, 키에 따른 순서가 보장되어 결과를 예측하기 쉽습니다. 키는 각 키-값 쌍을 고유하게 식별하기 때문에, 이를 기준으로 정렬하면 딕셔너리를 빠르게 탐색하거나 필요한 정보를 찾는 데 도움이 됩니다.
dictionary = {'c': 3, 'a': 1, 'b': 2}
sorted_dict = dict(sorted(dictionary.items()))
print(sorted_dict)
# Output
{'a': 1, 'b': 2, 'c': 3}
2. 값 (value) 기준 정렬 (lambda 함수)
값으로 딕셔너리를 정렬하려면 sorted()
함수의 key
인자에 lambda
함수를 사용하여 딕셔너리의 값으로 정렬합니다.
값을 기준으로 딕셔너리를 정렬하면, 값에 따른 순서가 보장되며, 이를 통해 값의 분포나 패턴을 쉽게 파악할 수 있습니다.
lambda
함수를 사용하면 간편하게 값에 따른 정렐 조건을 설정할 수 있습니다. lambda
함수는 익명 함수로, 간단한 기능을 구현할 때 유용하게 사용됩니다.
dictionary = {'a': 3, 'b': 1, 'c': 2}
sorted_dict = dict(sorted(dictionary.items(), key=lambda item: item[1]))
print(sorted_dict)
# Output
{'b': 1, 'c': 2, 'a': 3}
3. value 여러개 혹은 내림차순 정렬
3.1. value 여러개 기준으로 정렬
딕셔너리의 값이 여러 개일 때, 이를 기준으로 딕셔너리를 정렬하는 것은 조금 더 복잡합니다. 특히 값이 튜플이나 리스트와 같이 순서가 있는 데이터 타입일 경우에 해당합니다.
예를 들어, 아래와 같이 키와 값을 가진 딕셔너리가 있다고 가정해 보겠습니다.
dict_to_sort = {'a': (2, 3), 'b': (1, 3), 'c': (1, 2), 'd': (2, 2)}
여기서 값은 두 개의 원소로 이루어진 튜플입니다. 이를 키와 첫 번째 원소, 그리고 두 번째 원소 순으로 정렬하려면 아래와 같이 코드를 작성할 수 있습니다.
sorted_dict = dict(sorted(dict_to_sort.items(), key=lambda item: (item[0], item[1][0], item[1][1])))
print(sorted_dict)
# Output
{'b': (1, 3), 'c': (1, 2), 'a': (2, 3), 'd': (2, 2)}
여기서 key=lambda item: (item[0], item[1][0], item[1][1])
부분은 정렬 키를 지정하는 코드입니다.
이때 item[0]
은 딕셔너리의 키, item[1][0]
은 딕셔너리의 값인 튜플의 첫 번째 원소, item[1][1]
은 딕셔너리의 값인 튜플의 두 번째 원소를 나타냅니다.
따라서 이 코드는 키와 튜플의 첫 번째 원소, 그리고 두 번째 원소 순으로 딕셔너리를 정렬하게 됩니다.
이와 같이, 딕셔너리의 값을 구성하는 각 원소를 정렬의 기준으로 사용하여, 값 여러 개를 기준으로 딕셔너리를 정렬할 수 있습니다.
3.2. 내림차순 정렬
딕셔너리를 내림차순으로 정렬하려면, sorted()
함수의 reverse
인자를 True
로 설정하면 됩니다.
예를 들어, 아래와 같은 딕셔너리가 있다고 가정해봅시다.
my_dict = {'b': 5, 'a': 9, 'c': 7}
이 딕셔너리를 키를 기준으로 내림차순으로 정렬하려면 다음과 같이 할 수 있습니다.
sorted_dict = dict(sorted(my_dict.items(), key=lambda item: item[0], reverse=True))
print(sorted_dict)
# Output
{'c': 7, 'b': 5, 'a': 9}
마찬가지로, 이 딕셔너리를 값을 기준으로 내림차순으로 정렬하려면 다음과 같이 할 수 있습니다.
sorted_dict = dict(sorted(my_dict.items(), key=lambda item: item[1], reverse=True))
print(sorted_dict)
# Output
{'a': 9, 'c': 7, 'b': 5}
여기서 key=lambda item: item[0]
또는 key=lambda item: item[1]
는 정렬의 기준을 지정하는 코드이며,
reverse=True
는 이 기준에 따라 딕셔너리를 내림차순으로 정렬하도록 지시하는 코드입니다.
4. 다중 딕셔너리 정렬
딕셔너리 내부에 또 다른 딕셔너리가 있는 경우, 이를 '중첩 딕셔너리'라고 합니다. 중첩 딕셔너리는 데이터를 계층적으로 구조화하는데 유용하며, JSON 같은 데이터 형식에서 자주 보게 됩니다.
하지만 중첩 딕셔너리의 정렬은 약간 복잡할 수 있습니다. 이 때는 외부 딕셔너리의 키나 내부 딕셔너리의 키 또는 값을 기준으로 정렬해야 합니다.
예를 들어, 아래와 같이 '사용자 이름'을 키로 하고, '나이'와 '주소'를 키로 가진 딕셔너리를 값으로 가지는 중첩 딕셔너리가 있다고 가정해 봅시다.
nested_dict = {'John': {'age': 25, 'address': '123 St'},
'Jane': {'age': 23, 'address': '456 St'},
'Dave': {'age': 30, 'address': '789 St'}}
이 중첩 딕셔너리를 '나이'를 기준으로 정렬하려면 다음과 같이 코드를 작성할 수 있습니다.
sorted_dict = dict(sorted(nested_dict.items(), key=lambda item: item[1]['age']))
print(sorted_dict)
# Output
{'Jane': {'age': 23, 'address': '456 St'},
'John': {'age': 25, 'address': '123 St'},
'Dave': {'age': 30, 'address': '789 St'}}
여기서 key=lambda item: item[1]['age']
부분은 '나이'를 기준으로 정렬을 수행하도록 정렬 키를 지정하는 코드입니다.
이 때, item[1]
은 딕셔너리의 값을 나타내며, 이 값은 또 다른 딕셔너리입니다.
따라서 item[1]['age']
는 중첩된 딕셔너리에서 '나이'에 해당하는 값을 가져오는 코드가 됩니다.
이렇게 중첩 딕셔너리를 정렬하면, 각 계층에 따른 데이터를 쉽게 파악하고 관리할 수 있습니다. 물론, 중첩의 수준이 더 깊어질수록 정렬이 복잡해지겠지만, 동일한 원리가 적용됩니다.
5. 파이썬 리스트 안에 딕셔너리 정렬
리스트 내의 딕셔너리를 정렬하려면 key
인자에 정렬하려는 딕셔너리의 키를 지정합니다.
list_of_dict = [{'name': 'John', 'age': 25}, {'name': 'Jane', 'age': 23}, {'name': 'Dave', 'age': 30}]
sorted_list_of_dict = sorted(list_of_dict, key=lambda d: d['age'])
print(sorted_list_of_dict)
# Output
[{'name': 'Jane', 'age': 23}, {'name': 'John', 'age': 25}, {'name': 'Dave', 'age': 30}]
6. 딕셔너리 정렬 출력
딕셔너리를 정렬하여 출력하려면 for
문을 사용하여 키-값 쌍을 반복합니다.
dictionary = {'c': 3, 'a': 1, 'b': 2}
sorted_dict = dict(sorted(dictionary.items()))
for key, value in sorted_dict.items():
print(f"{key}: {value}")
# Output
a: 1
b: 2
c: 3
마치며
지금까지 파이썬 딕셔너리 정렬과 관련된 6가지 주제를 살펴보았습니다. 이러한 내용들이 앞으로 실제 작업에서 도움이 되길 바랍니다.