본문 바로가기
개발일기/파이썬

python 딕셔너리(dict) 정렬(sorted), 역순정렬

by 프로그래머콩 2020. 7. 6.

하도 까먹어서 적어놓는 딕셔너리형 정렬 방법

딕셔너리는 key와 value 둘 중 어떤걸 기준으로

삼느냐에 따라 정렬 방법이 달라진다

 

 

이러한 배열이 있다고 가정하고

키(key) 기준 정렬하는 방법

값(value)기준 정렬하는 방법은

sorted를 사용하며 사용법은 아래와 같다.

#오름차순
def dict_sort(dict_obj,is_key):
    sort = {}
    if is_key is True:
        # 키를 이용한 정렬
        sort_ = sorted(result_parsing_keywords.items(), reverse=False)
            # 또는 sorted(result_parsing_keywords.items())
    else:
        # 값을 이용한 정렬
        sort_ = sorted(dict_obj.items(), key=operator.itemgetter(1))

    return sort_

 

 

result_parsing_keywrds대신 object를 넣어주면 되며

.items()는 원래 dict의 아이템을 가져올때 사용하는 형식

reverse옵션은 기본이 False라서 오름차순으로

나타내고 싶을때는 작성하지 않아도 무방하다고 하지만

나는 적어주었다.

 

값을 이용한 정렬엔 

key=operator.itemgetter(1) 라는 표현이 사용되었는데

여기서 넣는 숫자값은 딕셔너리의 몇번째 item?을 가져올건지에 대한 값이라고 한다

그러니 0 넣으면 key, 1넣으면 첫번째 value...이렇게?

아직 다중 key, value 처리는 해보지 않았다

# 내림차순
def dict_sort_reverse(dict_obj,is_key):
    sort_reverse = {}
    if is_key is True:
        # 키를 이용한 정렬
        sort_reverse = sorted(dict_obj.items(), reverse=True)
    else:
        # 값을 이용한 정렬
        sort_reverse = sorted(dict_obj.items(), key=operator.itemgetter(1), reverse=True)


    return sort_reverse

 

내림차순은 이렇게 표현했고

키를 이용한 정렬, 값을 이용한 정렬

오름차순, 내림차순 출력해보면

 

 

 

 

아래와 같이 나타난다

 

 

굳이 함수 두개나 둘 필요 없을것 같아서 

최종적으로 아래와 같이 구현함

def dict_sort(dict_obj,is_key,is_reverse):
    sort_ = {}
    # is_reverse가 true면 내림차순
    # ex, 3,2,1,...
    if is_key is True:
        # key기준
        sort_ = sorted(dict_obj.items(), key=operator.itemgetter(0), reverse=is_reverse)
    else:
        # value기준
        sort_ = sorted(dict_obj.items(), key=operator.itemgetter(1), reverse=is_reverse)


    return sort_

 

값 기준 내림차순으로 구현하고 싶으면

result = {}
result = dict_sort(dict_obj,1,True)

이렇게 넣으면 된다