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() 메서드를 사용합니다.
단계는 다음과 같습니다.
샤와난드
- 정렬할 사전을 정의합니다.
- 값별로 사전을 정렬하려면 sorted() 메서드를 사용하세요.
- 정렬이 값별로 수행되도록 지정하려면 람다 함수를 sorted() 메서드의 주요 매개 변수로 전달합니다.
- 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) 시간이 걸립니다.