파이썬의 딕셔너리를 다루다 보면 정렬을 해야하는 경우가 발생한다. 딕셔너리는 key와 value를 가지고 있으므로 key값을 기준으로 정렬, value값을 기준으로 정렬을 할 수 있다.

우선 기본적으로 리스트와 달리 sort()를 사용할 수 없고 sorted()만 사용할 수 있다.

 

① key값을 기준으로 정렬

dict1 = {'g': 1, 'b': 5, 'z': 8, 'e': 2, 'k': 10}


sorted_dict1 = sorted(dict1.items(), key=lambda x: x[0])

print(sorted_dict1) # [('b', 5), ('e', 2), ('g', 1), ('k', 10), ('z', 8)]
print(type(sorted_dict1)) # <class 'list'> ==> dict타입 아님 주의!!


sorted_dict1 = dict(sorted(dict1.items(), key=lambda x: x[0])) 

print(sorted_dict1) # {'b': 5, 'e': 2, 'g': 1, 'k': 10, 'z': 8}
print(type(sorted_dict1)) # <class 'dict'>

위의 코드와 같이 sorted()결과는 리스트로, 딕셔너리로 사용하고 싶으면 dict()를 이용해야 한다.

그리고 정렬된 key값만 얻고싶은 경우에는 key인자를 설정하지 않아도 된다.

dict1 = {'g': 1, 'b': 5, 'z': 8, 'e': 2, 'k': 10}


sorted_dict1 = sorted(dict1) 

print(sorted_dict1) # ['b', 'e', 'g', 'k', 'z']
print(type(sorted_dict1)) # <class 'list'>


sorted_dict1 = sorted(dict1.keys()) 

print(sorted_dict1) # ['b', 'e', 'g', 'k', 'z']
print(type(sorted_dict1)) # <class 'list'>

sorted()에 dict1로 하는 경우와 dict1.keys()로 한 경우가 동일한 결과를 갖는다. 결과 type은 리스트다.

 

② value값을 기준으로 정렬

dict1 = {'g': 1, 'b': 5, 'z': 8, 'e': 2, 'k': 10}


sorted_dict1 = sorted(dict1.items(), key=lambda x: x[1]) 

print(sorted_dict1) # [('g', 1), ('e', 2), ('b', 5), ('z', 8), ('k', 10)]
print(type(sorted_dict1)) # <class 'list'> ==> dict타입 아님 주의!!


sorted_dict1 = dict(sorted(dict1.items(), key=lambda x: x[1]))

print(sorted_dict1) # {'g': 1, 'e': 2, 'b': 5, 'z': 8, 'k': 10}
print(type(sorted_dict1)) # <class 'dict'>

마찬가지로 sorted()결과는 리스트로, 딕셔너리로 사용하고 싶으면 dict()를 이용해야 한다.

그리고 정렬된 value값만 얻고싶은 경우에는 간단하게 values()를 이용하면 된다.

dict1 = {'g': 1, 'b': 5, 'z': 8, 'e': 2, 'k': 10}


sorted_dict1 = sorted(dict1.values()) 

print(sorted_dict1) # [1, 2, 5, 8, 10]
print(type(sorted_dict1)) # <class 'list'>

 

'개발 > Python' 카테고리의 다른 글

[Python] sort()의 key를 이용한 리스트 다중 정렬  (0) 2020.12.28

+ Recent posts