본문 바로가기
프로그래밍 언어/Python 3

[Python] Dictionary sorting by key or value

by Physics 2020. 12. 19.
728x90

문제상황: 딕셔너리에 입력된 Key 또는 value 값으로 sort를 해야하는 경우

예제에서 사용할 딕셔너리

   ※ Dictionary의 구조: {key:Value}

example = {"tommy": 95, "Timmy": 60, "Aimee": 58, "Carmen": 20, "Sam": 77}

 

1. Key 을 통한 sorting 

딕셔너리의 key값과 value값들을 정렬할 때 모두 sorted() 메소드를 이용한다. 
   • sorted() 내부에 별도로 key값을 설정하지 않을 경우, 기본적으로 key값을 기준으로 정렬함
   • key 값을 오름차순 순서로 sorting 한다. 

>>> sorted(example.items())
[('Aimee', 58), ('Carmen', 20), ('Sam', 77), ('Timmy', 60), ('tommy', 95)]


   • 내림차순으로 sorting 하는 경우: reverse=True 옵션을 이용함

sorted(example.items(), reverse=True)
>>> [('tommy', 95), ('Timmy', 60), ('Sam', 77), ('Carmen', 20), ('Aimee', 58)]

 

2. value 값을 통한 sorting 

Dictionary 내의 value값을 기준으로 sorting을 하기 위해선, sorted() 함수의 "key=" 옵션을 사용해야한다. 이때, 해당 옵션에서는 크게 두 가지 방식을 사용할 수 있다; lambda 함수를 통한 방법과 operator 모듈을 통한 방법

    • <dictionary>.items()을 사용하여 딕셔너리를 튜플의 형태로 변환 
    • 동일하게 내림차순으로 정렬하는 경우에는 "reverse=True" 옵션을 적용함
    • 옵션 "key="를 사용하여, 배열 내의 몇 번째 원소를 기준으로 기준을 삼아 정렬할 것인지를 정함 


  1) lambda 함수 이용[2]

>>> example.items()
dict_items([('tommy', 95), ('Timmy', 60), ('Aimee', 58), ('Carmen', 20), ('Sam', 77)])
>>> sorted(example.items(),key=(lambda x: x[1]), reverse=True)
[('tommy', 95), ('Sam', 77), ('Timmy', 60), ('Aimee', 58), ('Carmen', 20)]

   
    • 만일 lambda x: x[0]을 사용할 경우, key(또는 첫번째 원소)를 기준으로 정렬 

>>> sorted(example.items(),key=(lambda x: x[0]), reverse=True)
[('tommy', 95), ('Timmy', 60), ('Sam', 77), ('Carmen', 20), ('Aimee', 58)]

 

  2) operator 모듈을 통한 인자 설정 [1]

    • key= 옵션에 operator.itemgetter(n)을 이용한다. (n: nth index)
    • n = 0일 때, dictionary의 key값을 기준으로 정렬 

>>> import operator
>>> sorted(example.items(),key=operator.itemgetter(0))
[('Aimee', 58), ('Carmen', 20), ('Sam', 77), ('Timmy', 60), ('tommy', 95)]

 

    • n = 1 일 때, dictionary의 value 값을 기준으로 정렬

>>> import operator
>>> sorted(example.items(),key=operator.itemgetter(1))
[('Carmen', 20), ('Aimee', 58), ('Timmy', 60), ('Sam', 77), ('tommy', 95)]

Reference: 
[1] kkamikoon.tistory.com/138  
[2] gomguard.tistory.com/127  
[3] stackabuse.com/how-to-sort-dictionary-by-value-in-python/

 

 

728x90

댓글