Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python 딕셔너리를 값 기준으로 정렬하는 방법 완벽 가이드

Python에서 딕셔너리(dictionary)로 이루어진 리스트를 특정 키의 값을 기준으로 정렬해야 하는 경우가 자주 있습니다. 예를 들어 사용자 데이터를 나이순으로 정렬하거나, 상품 목록을 가격순으로 나열하는 작업이 대표적입니다. 이때는 내장 함수인 sorted() 또는 리스트 메서드인 sort()에 람다(lambda) 함수를 전달하여 손쉽게 해결할 수 있습니다.

sorted() 함수로 새로운 정렬된 리스트 만들기

sorted() 함수는 원본 리스트를 변경하지 않고, 정렬된 새로운 리스트를 반환합니다. key 매개변수에 람다 함수를 전달하면 딕셔너리의 어떤 키를 기준으로 정렬할지 지정할 수 있습니다.

A = [{'name':'john','age':45},
     {'name':'andi','age':23},
     {'name':'john','age':22},
     {'name':'paul','age':35},
     {'name':'john','age':21}]

new_A = sorted(A, key=lambda x: x['age'])
print(new_A)

위 코드를 실행하면 'age' 값을 기준으로 오름차순 정렬된 결과가 출력됩니다.

[{'name': 'john', 'age': 21}, {'name': 'john', 'age': 22}, {'name': 'andi', 'age': 23}, {'name': 'paul', 'age': 35}, {'name': 'john', 'age': 45}]

sort() 메서드로 원본 리스트를 직접 정렬하기

새로운 리스트를 만들 필요 없이 원본 리스트 자체를 정렬하고 싶다면 sort() 메서드를 사용하면 됩니다. 사용법은 sorted()와 동일하게 key 매개변수에 람다 함수를 넘겨주면 됩니다.

A = [{'name':'john','age':45},
     {'name':'andi','age':23},
     {'name':'john','age':22},
     {'name':'paul','age':35},
     {'name':'john','age':21}]

A.sort(key=lambda x: x['age'])
print(A)

실행 결과는 다음과 같습니다.

[{'name': 'john', 'age': 21}, {'name': 'john', 'age': 22}, {'name': 'andi', 'age': 23}, {'name': 'paul', 'age': 35}, {'name': 'john', 'age': 45}]

내림차순으로 정렬하기

값이 큰 순서대로 정렬하고 싶다면 reverse=True 옵션을 추가하면 됩니다. sorted()sort() 모두에서 사용할 수 있습니다.

new_A = sorted(A, key=lambda x: x['age'], reverse=True)

sorted()와 sort()의 차이점 정리

  • sorted(): 어떤 반복 가능한 객체든 받을 수 있으며, 정렬된 새로운 리스트를 반환합니다. 원본은 그대로 유지됩니다.
  • sort(): 리스트 객체의 메서드로, 원본 리스트를 직접(in-place) 수정하며 None을 반환합니다.

메모리 사용량을 줄이고 싶거나 원본 데이터가 더 이상 필요 없다면 sort()를, 원본을 보존해야 한다면 sorted()를 사용하는 것이 좋습니다.