[Python] dictionary 자료형 정렬

김영후·2023년 1월 31일
0

Python 회고록

목록 보기
4/5

PS 공부를 하다보면 파이썬의 자료형 중 dictionary를 다룰 일이 많다. list의 sort()나 sorted()의 경우 많이 써서 익숙하지만, dictionary의 정렬은 정규식을 포함하니 익숙하지 않았다. 그래서 정리를 한 번 해야겠다는 생각이 들었다.

우선 dictionary에는 key와 value가 있다. 그리고 정렬에는 오름차순과 내림차순이 있으므로 지금 정리해볼 정렬의 경우는 총 4가지가 되겠다.

Key기준, 오름차순 정렬

정렬은 우선 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가 알파벳이었으므로 알파벳 순서로 정렬된 모습을 볼 수 있다.

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기준, 오름차순 정렬

이제는 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기준, 내림차순 정렬

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임을 인지하고 사용한다면 유용하게 사용할 수 있을 것 같다.

profile
PNU CSE 16th / Busan, South Korea

0개의 댓글