logo

파이썬 | 사전 정렬

Python, 사전이 주어지면 키 또는 값을 기준으로 정렬을 수행합니다. [ 해당 Python>=3.6v ].

입력 : test_dict = {Gfg : 5, is : 7, Best : 2} 산출 : {'최고': 2, 'Gfg': 5, 'is': 7}, {'is': 7, 'Gfg': 5, 'Best': 2} 설명 : 키를 기준으로 오름차순 및 역순으로 정렬됩니다. 입력 : test_dict = {최고: 2, for: 9, 괴짜: 8} 산출 : {'최고': 2, 'Gfg': 5, 'for': 9}, {'for': 9, 'geeks': 8, 'Best': 2} 설명 : 값을 기준으로 오름차순 및 역순으로 정렬됩니다.



사례 1: 키를 기준으로 정렬

이 작업은 sorted()를 사용하여 수행됩니다. 여기서는 items()로 추출된 사전 항목의 첫 번째 인덱스를 사용하여 키를 추출하고 이를 사용자 정의 람다 함수로 key에 전달하여 키별로 정렬합니다. 역 정렬을 수행하려면 reverse=True가 추가됩니다.

파이썬3








정수를 문자열로 변환 자바
# Python3 code to demonstrate working of> # Sort a Dictionary> # Sort by Keys> # initializing dictionary> test_dict>=> {>'Gfg'> :>5>,>'is'> :>7>,>'Best'> :>2>,>'for'> :>9>,>'geeks'> :>8>}> # printing original dictionary> print>(>'The original dictionary is : '> +> str>(test_dict))> # using items() to get all items> # lambda function is passed in key to perform sort by key> res>=> {key: val>for> key, val>in> sorted>(test_dict.items(), key>=> lambda> ele: ele[>0>])}> # printing result> print>(>'Result dictionary sorted by keys : '> +> str>(res))> # using items() to get all items> # lambda function is passed in key to perform sort by key> # adding 'reversed = True' for reversed order> res>=> {key: val>for> key, val>in> sorted>(test_dict.items(), key>=> lambda> ele: ele[>0>], reverse>=> True>)}> # printing result> print>(>'Result dictionary sorted by keys ( in reversed order ) : '> +> str>(res))>

>

>

산출

The original dictionary is : {'Gfg': 5, 'is': 7, 'Best': 2, 'for': 9, 'geeks': 8} Result dictionary sorted by keys : {'Best': 2, 'Gfg': 5, 'for': 9, 'geeks': 8, 'is': 7} Result dictionary sorted by keys ( in reversed order ) : {'is': 7, 'geeks': 8, 'for': 9, 'Gfg': 5, 'Best': 2}>

사례 2: 값을 기준으로 정렬

이 작업은 위와 비슷한 방식으로 수행할 수 있습니다. 유일한 차이점은 값을 추출할 때 items()의 두 번째 요소가 비교기로 전달된다는 것입니다.

파이썬3




# Python3 code to demonstrate working of> # Sort a Dictionary> # Sort by Values> # initializing dictionary> test_dict>=> {>'Gfg'> :>5>,>'is'> :>7>,>'Best'> :>2>,>'for'> :>9>,>'geeks'> :>8>}> # printing original dictionary> print>(>'The original dictionary is : '> +> str>(test_dict))> # using items() to get all items> # lambda function is passed in key to perform sort by key> # passing 2nd element of items()> res>=> {key: val>for> key, val>in> sorted>(test_dict.items(), key>=> lambda> ele: ele[>1>])}> # printing result> print>(>'Result dictionary sorted by values : '> +> str>(res))> # using items() to get all items> # lambda function is passed in key to perform sort by key> # passing 2nd element of items()> # adding 'reversed = True' for reversed order> res>=> {key: val>for> key, val>in> sorted>(test_dict.items(), key>=> lambda> ele: ele[>1>], reverse>=> True>)}> # printing result> print>(>'Result dictionary sorted by values ( in reversed order ) : '> +> str>(res))>

>

>

산출

The original dictionary is : {'Gfg': 5, 'is': 7, 'Best': 2, 'for': 9, 'geeks': 8} Result dictionary sorted by values : {'Best': 2, 'Gfg': 5, 'is': 7, 'geeks': 8, 'for': 9} Result dictionary sorted by values ( in reversed order ) : {'for': 9, 'geeks': 8, 'is': 7, 'Gfg': 5, 'Best': 2}>

방법#3: collections.OrderedDict() 및 sorted() 사용

접근하다

이 접근 방식은 sorted() 함수를 사용하여 해당 값을 기준으로 오름차순 또는 내림차순으로 사전을 정렬합니다. sorted() 함수는 사전의 items() 메소드와 각 튜플의 두 번째 요소(즉, 값) 또는 그 부정을 반환하는 키 함수와 함께 호출됩니다. 결과 튜플 목록은 OrderedDict() 생성자에 전달되어 원래 사전과 동일한 키-값 쌍을 사용하지만 값별로 정렬된 새로운 순서 사전을 생성합니다.

연산

1. 'test_dict' 사전에서 sorted() 함수를 호출하고 람다 함수를 'key' 인수로 전달합니다.
2. 람다 함수는 각 키-값 쌍을 입력으로 사용하고 원하는 순서에 따라 정렬할 키 또는 값을 반환합니다.
3. sorted() 함수를 사용하여 정렬된 키-값 쌍 목록을 반환합니다.
4. 정렬된 목록을 OrderedDict() 생성자에 전달하여 새로운 순서 사전을 생성합니다.
5. 주문한 사전을 반환합니다.

파이썬3




from> collections>import> OrderedDict> from> operator>import> itemgetter> def> sort_dict_by_value(test_dict):> >sorted_list>=> sorted>(test_dict.items(), key>=>itemgetter(>1>))> >return> OrderedDict(sorted_list)> def> sort_dict_by_value_reverse(test_dict):> >sorted_list>=> sorted>(test_dict.items(), key>=>itemgetter(>1>), reverse>=>True>)> >return> OrderedDict(sorted_list)> test_dict>=> {>'Gfg'> :>5>,>'is'> :>7>,>'Best'> :>2>,>'for'> :>9>,>'geeks'> :>8>}> print>(sort_dict_by_value(test_dict))> print>(sort_dict_by_value_reverse(test_dict))>

>

>

산출

OrderedDict([('Best', 2), ('Gfg', 5), ('is', 7), ('geeks', 8), ('for', 9)]) OrderedDict([('for', 9), ('geeks', 8), ('is', 7), ('Gfg', 5), ('Best', 2)])>

시간 복잡도: O(N log N), 여기서 N은 사전의 키-값 쌍 수입니다.
공간 복잡도: O(N), 정렬된 키-값 쌍을 저장하기 위해 새로운 순서 사전을 생성하기 때문입니다.

방법 4: 람다 함수를 키 매개변수로 사용하여 sorted() 메서드를 사용합니다.

단계는 다음과 같습니다.

샤와난드
  1. 정렬할 사전을 정의합니다.
  2. 값별로 사전을 정렬하려면 sorted() 메서드를 사용하세요.
  3. 정렬이 값별로 수행되도록 지정하려면 람다 함수를 sorted() 메서드의 주요 매개 변수로 전달합니다.
  4. dict() 생성자를 사용하여 정렬된 튜플 목록에서 새 사전을 만듭니다.

파이썬3




def> sort_dict_by_value_lambda(test_dict):> >sorted_list>=> sorted>(test_dict.items(), key>=>lambda> x: x[>1>])> >return> dict>(sorted_list)> def> sort_dict_by_value_lambda_reverse(test_dict):> >sorted_list>=> sorted>(test_dict.items(), key>=>lambda> x: x[>1>], reverse>=>True>)> >return> dict>(sorted_list)> test_dict>=> {>'Gfg'> :>5>,>'is'> :>7>,>'Best'> :>2>,>'for'> :>9>,>'geeks'> :>8>}> print>(sort_dict_by_value_lambda(test_dict))> print>(sort_dict_by_value_lambda_reverse(test_dict))>

>

>

산출

{'Best': 2, 'Gfg': 5, 'is': 7, 'geeks': 8, 'for': 9} {'for': 9, 'geeks': 8, 'is': 7, 'Gfg': 5, 'Best': 2}>

시간 복잡도: O(n log n) 여기서 n은 사전의 항목 수입니다.

보조 공간: O(n) - 정렬된 튜플 목록을 저장합니다. dict() 생성자는 정렬된 목록에서 새 사전을 생성하는 데 O(n) 시간이 걸립니다.