[Python] 딕셔너리 정렬하기

반응형
    반응형

    딕셔너리를 정렬해야할 때가 있습니다. 

    특히나 딕셔너리는 {Key : Value} 로 되어있어서 Key정렬로 할 것인지 Value 정렬로 할 것인지 상황에 따라 달라집니다.

    이번 포스팅에서는 각 기준에 따라 정렬하는 방법을 소개하겠습니다.

    이 방법은 딕셔너리로 예쁘게 나오는 방법이 아닙니다. 리스트로 반환됩니다. 

    코딩 중에 정렬을 해서 뽑아내서 뭘 하기 위해 하는 중간과정이라 보시면 될 것 같습니다.

     

    1. Key를 이용한 정렬
    2. Value를 이용한 정렬

     

    Key를 이용한 정렬

    Key로 정렬하는 방법은 간단합니다. 리스트에서 하던 방식대로 하면 됩니다. sorded 함수를 사용합니다.

    >>> data_dict = {}
    >>> data_dict['A'] = 0
    >>> data_dict['B'] = 4
    >>> data_dict['C'] = 2
    >>> data_dict['D'] = 8
    >>> data_dict
    {'A': 0, 'B': 4, 'C': 2,'D': 8}

    먼저 이렇게 딕셔너리를 만들었습니다. 이제 정렬을 해보겠습니다.

    >>> sort_dict = sorted(data_dict.items())
    >>> sort_dict
    [('A', 0), ('B', 4), ('C', 2), ('D', 8)]

    기본적으로 오름차순으로 되고 내림차순으로 하고 싶다면 'reverse=True' 를 입력합니다.

    >>> sort_dict = sorted(data_dict.items(),reverse=True)
    >>> sort_dict
    [('D', 8), ('C', 2), ('B', 4), ('A', 0)]

    operator를 이용해 정렬을 할 수도 있습니다.

    operator.itemetter(0)을 하면 인덱스 0번을 뜻하는데 딕셔너리로 적용하면 0은 Key, 1은 Value 입니다.

    >>> import operator 
    >>> data_dict
    >>> sort_dict = sorted(data_dict.items(),key=operator.itemgetter(0))
    >>> sort_dict
    [('A', 0), ('B', 4), ('C', 2), ('D', 8)]

    lambda도 가능합니다.

    >>> sort_dict = sorted(data_dict.items(), key=lambda x: x[0])
    >>> sort_dict
    [('A', 0), ('B', 4), ('C', 2), ('D', 8)]

    Value를 이용한 정렬

    Value는 인덱스를 정해줘야 해서 lambda와 operator만 가능합니다.

    다 같은 맥락입니다. 편한걸로 쓰면 됩니다.

    먼저 operator는 인덱스 1로 지정하면 정렬이 됩니다.

    >>> import operator
    >>> data_dict
    >>> sort_dict = sorted(data_dict.items(),key=operator.itemgetter(1))
    >>> sort_dict
    [('A', 0), ('B', 2), ('C', 4), ('D', 8)]

    lambda도 마찬가지입니다. 인덱스 1로 놓고 합니다. 그래서 x[1] 로 합니다.

    >>> sort_dict = sorted(data_dict.items(), key=lambda x: x[1])
    >>> sort_dict
    [('A', 0), ('C', 2), ('B', 4), ('D', 8)]

     

    생각보다 간단하게 정렬을 할 수 있습니다.

    튜플로 변환되는것이 조금 아쉽기는 하지만 사용의 목적이 있으니 괜찮은 것 같습니다.

    댓글

    Designed by JB FACTORY

    ....