PS 공부를 하다보면 파이썬의 자료형 중 dictionary를 다룰 일이 많다. list의 sort()나 sorted()의 경우 많이 써서 익숙하지만, dictionary의 정렬은 정규식을 포함하니 익숙하지 않았다. 그래서 정리를 한 번 해야겠다는 생각이 들었다.
우선 dictionary에는 key와 value가 있다. 그리고 정렬에는 오름차순과 내림차순이 있으므로 지금 정리해볼 정렬의 경우는 총 4가지가 되겠다.
정렬은 우선 sorted()를 이용해주며, key기준 정렬의 경우 list의 sorted()와 같이 괄호 안에 자료형을 넣어주면 된다. key를 기준으로 오름차순 정렬은 아래와 같이 사용하면 된다.
dict_test = {'a': 4, 'c': 2, 'b': 5, 'z': 4, 'f':2}
dict_test = sorted(dict_test.items())
이를 print해보면
[('a', 4), ('b', 5), ('c', 2), ('f', 2), ('z', 4)]
이와 같이 tuple(key, value)로 이루어진 list가 반환된다. key가 알파벳이었으므로 알파벳 순서로 정렬된 모습을 볼 수 있다.
내림차순 정렬의 경우 reverse = True를 인자로 전달해주어야 한다.
dict_test = {'a': 4, 'c': 2, 'b': 5, 'z': 4, 'f':2}
dict_test = sorted(dict_test.items(), revese=True)
이를 print해보면
[('z', 4), ('f', 2), ('c', 2), ('b', 5), ('a', 4)]
예상했듯이 알파벳 역순의 tuple list가 반환된다.
이제는 value를 기준으로 정렬을 하는 경우이다. 이때는 key 기준일 때와는 다르게 sorted() 메서드 내부에 정규표현식으로 기준이 value임을 명시해주어야 한다. 우선 코드를 보도록 하자.
dict_test = {'a': 4, 'c': 2, 'b': 5, 'z': 4, 'f':2}
dict_test = sorted(dict_test.items(), key=lambda item:item[1])
sorted() 메서드의 두 번째 인자를 보자. key는, dictionary의 key가 아니라 sorted() 메서드 사용 시 key를 지정하겠다는 뜻이다. 이 key를 매개변수가 item이고, 표현식이 item[1]인 lambda로 나타냈다. 쉽게 말해 item[1]이 key인 셈이다. dictionary에서 각 원소의 인덱스가 0이면 key, 1이면 value이므로 value기준 정렬이 되는 것이다. 이를 print해보면
[('c', 2), ('f', 2), ('a', 4), ('z', 4), ('b', 5)]
이와 같이 value를 기준으로 오름차순 정렬이 된 것을 확인할 수 있다.
value기준이라고 해서 내림차순이 특별해지진 않는다. key와 같이 오름차순 정렬을 했던 sorted()의 인자 말미에 reverse=True만 넣어주면 된다.
dict_test = {'a': 4, 'c': 2, 'b': 5, 'z': 4, 'f':2}
dict_test = sorted(dict_test.items(), key=lambda item:item[1], reverse=True)
print해주면
[('b', 5), ('a', 4), ('z', 4), ('c', 2), ('f', 2)]
이와 같이 value를 기준으로 내림차순으로 정렬된 것을 볼 수 있다.
이렇게 dictionary를 정렬하는 방법을 정리해보았는데, 이들의 반환형이 dictionary가 아닌 tuple list임을 인지하고 사용한다면 유용하게 사용할 수 있을 것 같다.