Jak sortować słownik według wartości w Pythonie

Dowiedz się, jak sortować słownik Pythona według jego wartości. Odkryj sortowanie za pomocą sorted(), niestandardowych wyrażeń lambda i tworzenia uporządkowanych struktur dyktowania.

Wypróbuj to rozwiązanie w Edytorze

Przegląd

Chociaż słowniki są tworzone głównie do szybkiego wyszukiwania przy użyciu unikalnych kluczy, często konieczne będzie sortowanie elementów słownika na podstawie ich wartości. Na przykład sortowanie uczniów według ocen z egzaminów, wyświetlanie listy produktów od najtańszego do najdroższego lub porządkowanie liczby słów według częstotliwości.

W Pythonie nie można bezpośrednio sortować słownika w miejscu, ponieważ standardowe struktury słowników nie obsługują metod porządkowania, takich jak listy. Zamiast tego standardowe podejście polega na pobraniu elementów słownika w postaci krotek przy użyciu metody `.items()`, posortowaniu tych krotek przy użyciu wbudowanej funkcji `sorted()` z niestandardowym kluczem sortowania, a następnie odbudowaniu słownika z posortowanych elementów.

Klucz sortowania to zazwyczaj funkcja lambda, która zwraca drugi element krotki (wartość słownikowa): `klucz=element lambda: element[1]`. OdPython 3.7+ standardowe słowniki zachowują kolejność wstawiania. Ponowne rzutowanie posortowanej listy krotek z powrotem do słownika przy użyciu konstruktora `dict()` zwraca czysty, posortowany słownik gotowy do iteracji.

Dane wyjściowe kodu i wykonania

Ten skrypt demonstruje sortowanie słownika wyników testów według wartości w kolejności rosnącej i malejącej przy użyciu funkcji lambda.

sort_dict_values.py
Spróbuj w Edytorze
scores = {"Alice": 88, "Bob": 75, "Charlie": 95, "David": 82}
print("Original dictionary:", scores)

# 1. Sort by values (ascending order)
sorted_ascending = dict(sorted(scores.items(), key=lambda item: item[1]))
print("Sorted ascending:", sorted_ascending)

# 2. Sort by values (descending order)
sorted_descending = dict(sorted(scores.items(), key=lambda item: item[1], reverse=True))
print("Sorted descending:", sorted_descending)

# 3. sorting by keys for comparison
sorted_keys = dict(sorted(scores.items(), key=lambda item: item[0]))
print("Sorted by keys:", sorted_keys)
Wyjście terminala
Original dictionary: {'Alice': 88, 'Bob': 75, 'Charlie': 95, 'David': 82}
Sorted ascending: {'Bob': 75, 'David': 82, 'Alice': 88, 'Charlie': 95}
Sorted descending: {'Charlie': 95, 'Alice': 88, 'David': 82, 'Bob': 75}
Sorted by keys: {'Alice': 88, 'Bob': 75, 'Charlie': 95, 'David': 82}

Wdrażanie krok po kroku

  • Wywołaj funkcję my_dict.items(), aby pobrać pary klucz-wartość w postaci listy krotek.
  • Przekaż elementy słownika do funkcji sorted().
  • Podaj klucz=lambda item: item[1], aby poinstruować funkcję sorted() o sortowaniu na podstawie wartości (drugi element każdej krotki).
  • Przekaż Reverse=True jako opcjonalny argument, aby posortować elementy w kolejności malejącej.
  • Odbuduj posortowany słownik, przekazując posortowaną listę krotek do konstruktora dict().

Często zadawane pytania

Co oznacza klucz=lambda pozycja: pozycja[1]?

Funkcja sorted() przekazuje każdy element sekwencji elementów (krotkę (klucz, wartość)) do funkcji lambda. item[1] wyodrębnia komponent wartości, nakazując Pythonowi posortowanie krotek według wartości.

Czy sortowanie słownika wpływa na szybkość wyszukiwania kluczy?

Nie, wyszukiwania kluczy pozostają średnio złożonością czasową O(1), ponieważ sortowanie zmienia tylko sekwencję iteracji, a nie podstawową strukturę tabeli skrótów.

Powiązane tematy

Polecane zasoby Pythona

Poszerzaj swoją wiedzę dzięki powiązanym interaktywnym samouczkom, ściągawkom i porównaniom kodów.