logo

Pythona | Sortuj słownik

Python, mając słownik, wykonaj sortowanie na podstawie kluczy lub wartości. [ dotyczy Pythona>= 3,6 v ].

Wejście : test_dict = {Gfg: 5, wynosi: 7, Najlepszy: 2} Wyjście : {„Najlepszy”: 2, „Gfg”: 5, „jest”: 7}, {„jest”: 7, „Gfg”: 5, „Najlepszy”: 2} Wyjaśnienie : Posortowane według kluczy, w kolejności rosnącej i odwrotnej. Wejście : test_dict = {Najlepiej: 2, dla: 9, maniacy: 8} Wyjście : {‚Najlepszy’: 2, «Gfg»: 5, «dla»: 9}, {„dla”: 9, „geeks”: 8, „Najlepszy”: 2} Wyjaśnienie : Posortowane według wartości, w kolejności rosnącej i odwrotnej.



Przypadek 1: Sortuj według kluczy

To zadanie jest wykonywane za pomocą metody sorted(). W tym przypadku wyodrębniamy klucze przy użyciu pierwszego indeksu elementów słownika wyodrębnionych za pomocą items() i przekazujemy je do klucza jako niestandardową funkcję lambda, aby posortować według kluczy. Reverse=True jest dodawane w celu wykonania sortowania odwrotnego.

Python3








# 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))>

>

>

Wyjście

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}>

Przypadek 2: Sortuj według wartości

To zadanie można wykonać w podobny sposób jak powyżej, z tą tylko różnicą, że wyodrębnia wartości, drugi element items() jest przekazywany jako komparator.

Python3




# 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))>

>

>

Wyjście

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}>

Metoda nr 3: Korzystanie z kolekcji.OrderedDict() i sorted()

Zbliżać się

to podejście wykorzystuje funkcję sorted() do sortowania słownika według jego wartości w kolejności rosnącej lub malejącej. Funkcja sorted() jest wywoływana za pomocą metody items() słownika i funkcji klucza, która zwraca drugi element każdej krotki (tj. wartości) lub ich negację. Wynikowa lista krotek jest przekazywana do konstruktora OrderedDict() w celu utworzenia nowego uporządkowanego słownika z tymi samymi parami klucz-wartość co słownik oryginalny, ale posortowanymi według wartości.

Algorytm

1. Wywołaj funkcję sorted() w słowniku „test_dict”, przekazując funkcję lambda jako argument „klucz”.
2. Funkcja lambda przyjmuje każdą parę klucz-wartość jako dane wejściowe i zwraca klucz lub wartość, według której ma zostać posortowane, w zależności od żądanej kolejności.
3. Użyj funkcji sorted(), aby zwrócić listę posortowanych par klucz-wartość.
4. Przekaż posortowaną listę konstruktorowi OrderedDict(), aby utworzyć nowy uporządkowany słownik.
5. Zwróć zamówiony słownik.

Python3




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))>

>

>

Wyjście

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

Złożoność czasowa: O(N log N), gdzie N to liczba par klucz-wartość w słowniku.
Złożoność przestrzeni: O(N), ponieważ tworzymy nowy uporządkowany słownik do przechowywania posortowanych par klucz-wartość.

Metoda 4: użyj metody sorted() z funkcją lambda jako parametrem kluczowym.

Oto kroki:

  1. Zdefiniuj słownik, który ma zostać posortowany.
  2. Aby posortować słownik według wartości, użyj metody sorted().
  3. Przekaż funkcję lambda jako parametr klucz do metody sorted(), aby określić, że sortowanie powinno odbywać się według wartości.
  4. Użyj konstruktora dict(), aby utworzyć nowy słownik na podstawie posortowanej listy krotek.

Python3


tablica obiektów w Javie



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))>

>

>

Wyjście

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

Złożoność czasowa: O(n log n) gdzie n to liczba pozycji w słowniku.

Przestrzeń pomocnicza: O(n) do przechowywania posortowanej listy krotek. Konstruktor dict() potrzebuje O(n) czasu na utworzenie nowego słownika z posortowanej listy.