Python에서 여러 개의 딕셔너리가 담긴 리스트를 크기(키-값 쌍의 개수) 기준으로 정렬해야 할 때가 있습니다. 이럴 때는 요소 하나를 매개변수로 받아 len() 함수로 그 길이를 반환하는 헬퍼 함수를 정의한 뒤, sort() 메서드의 key 인자로 지정하면 간단하게 해결할 수 있습니다.
아래 예제를 통해 실제 동작 방식을 확인해 보겠습니다.
예제 코드
def get_len(element):
return len(element)
my_dict = [{24: 56, 29: 11, 10: 22, 42: 28}, {54: 73, 59: 11}, {13: 39}, {31: 22, 59: 73, 57: 44}]
print("The dictionary is :")
print(my_dict)
my_dict.sort(key=get_len)
print("The result is :")
print(my_dict)출력 결과
The dictionary is :
[{24: 56, 29: 11, 10: 22, 42: 28}, {54: 73, 59: 11}, {13: 39}, {31: 22, 59: 73, 57: 44}]
The result is :
[{13: 39}, {54: 73, 59: 11}, {31: 22, 59: 73, 57: 44}, {24: 56, 29: 11, 10: 22, 42: 28}]코드 설명
get_len이라는 이름의 함수를 정의합니다. 이 함수는 요소(element)를 매개변수로 받아 해당 요소의 길이를 반환합니다.여러 개의 딕셔너리를 담은 리스트를 생성하고, 콘솔에 출력하여 원본 상태를 확인합니다.
sort()메서드를 호출하면서key인자에 앞서 정의한 함수를 지정합니다. 이렇게 하면 각 딕셔너리의 항목 개수를 기준으로 오름차순 정렬이 수행됩니다.정렬된 최종 결과가 콘솔에 출력됩니다.
참고: 람다(lambda)와 sorted() 활용하기
별도의 함수를 정의하지 않고 람다 표현식을 사용하면 코드를 더욱 간결하게 만들 수 있습니다. 또한 sorted() 함수를 사용하면 원본 리스트는 그대로 유지한 채 정렬된 새 리스트를 얻을 수 있습니다.
# 람다 표현식 사용 my_dict.sort(key=lambda x: len(x)) # 원본을 유지하고 새로운 정렬 리스트 생성 new_list = sorted(my_dict, key=lambda x: len(x))
내림차순으로 정렬하고 싶다면 reverse=True 옵션을 추가하면 됩니다.