Python/파이썬 기초

파이썬 딕셔너리 value, key로 정렬, 내부 리스트 정렬 예제

jimmy_AI 2022. 2. 23. 00:52
반응형

파이썬 사전(dict) 자료형 값 sort 방법 정리

안녕하세요. 이번 글에서는 파이썬의 기본 자료형인 딕셔너리 자료형에서

value 혹은 key를 기준으로 값들을 정렬하는 방법과

사전의 value가 리스트로 구성된 경우 정렬 방법에 대해서 다루어보겠습니다.

 

 

딕셔너리 value 기준 값 정렬

이해를 돕기 위하여, 아래와 같은 간단한 딕셔너리 자료가 있다고 가정해보겠습니다.

dict_a = {'당근' : '1', '참외' : '3', '딸기' : '0', '멜론' : '4', '수박' : '2'}

 

value를 기준으로 값들을 정렬하고 싶다면 아래의 예시처럼

sorted 함수와 lambda를 이용한 간단한 코드를 적용해주시면 됩니다.

sorted(dict_a.items(), key=lambda x: x[1])
# [('딸기', '0'), ('당근', '1'), ('수박', '2'), ('참외', '3'), ('멜론', '4')]

 

튜플로 사전 내 item들이 정렬된 리스트에서 key들만 순서대로 추출하고 싶다면

리스트 컴프리헨션을 활용하시면 쉽게 구현이 가능합니다.

[x[0] for x in sorted(dict_a.items(), key=lambda x: x[1])]
# ['딸기', '당근', '수박', '참외', '멜론']

 

만일, 내림차순으로 정렬을 하고 싶다면 sorted 함수 내에서

reverse 인자를 True로 설정해주시면 됩니다.

sorted(dict_a.items(), key=lambda x: x[1], reverse = True)
# [('멜론', '4'), ('참외', '3'), ('수박', '2'), ('당근', '1'), ('딸기', '0')]
반응형

딕셔너리 key 기준 값 정렬

key를 기준으로 사전 내 값을 정렬하고 싶은 경우에는

위의 lambda 함수 정의에서 x[1] 대신 x[0] 위치의 원소를 지정해주시면 됩니다.

sorted(dict_a.items(), key=lambda x: x[0])
# [('당근', '1'), ('딸기', '0'), ('멜론', '4'), ('수박', '2'), ('참외', '3')]

당근, 딸기, 멜론, 수박, 참외 순서는 가나다 순임을 참고해주시면 이해가 편합니다.

 

마찬가지로, reverse 인자를 통한 내림차순 정렬도 가능합니다.

sorted(dict_a.items(), key=lambda x: x[0], reverse = True)
# [('참외', '3'), ('수박', '2'), ('멜론', '4'), ('딸기', '0'), ('당근', '1')]

 

 

딕셔너리 안의 리스트 기준 값 정렬

더 심화된 예시로, value가 리스트로 이루어진 사전 자료형에 대하여

정렬을 하는 예시도 살펴보도록 하겠습니다.

 

기본적으로 정렬을 하는 방법은 위에서 설명한 방법들과 동일합니다.

다만, 리스트 사이에서의 순서는 첫 원소부터 순차적으로 비교한 결과를 기준으로 잡습니다.

 

아래의 코드는 리스트 자료형으로 구성된 사전에서 value 기준 정렬을 진행한 예시입니다.

dict_b = {'a' : [1, 3, 5], 'b' : [1, 2, 4], 'c' : [2, 1, 5], 'd' : [1, 2, 6]}

sorted(dict_b.items(), key=lambda x: x[1])
# [('b', [1, 2, 4]), ('d', [1, 2, 6]), ('a', [1, 3, 5]), ('c', [2, 1, 5])]

 

만일, value인 리스트들만 추출하여 보고 싶다면

앞의 예제와 마찬가지로 리스트 컴프리헨션을 사용하시면 구현이 편리합니다.

[x[1] for x in sorted(dict_b.items(), key=lambda x: x[1])]
# [[1, 2, 4], [1, 2, 6], [1, 3, 5], [2, 1, 5]]