Jak posortować słownik Pythona według klucza lub wartości

W tym samouczku dowiesz się, jak sortować słownik Pythona według jego klucza lub wartości.

Kiedy pracujesz ze słownikiem w Pythonie, czasami będziesz musiał posortować jego zawartość — według klucza lub według wartości. Ponieważ słownik Pythona jest mapowaniem klucz-wartość, utworzysz nowy słownik, w którym klucze lub wartości zostaną posortowane według potrzeb.

W tym samouczku zaczniemy od zapoznania się z podstawami słownika Pythona. Następnie nauczymy się tworzyć nowy słownik, w którym zawartość jest sortowana według klucza lub według wartości, w zależności od potrzeb.

Podstawy słownika Pythona, ponownie

Co to jest słownik Pythona?

Słownik jest wbudowaną strukturą danych w Pythonie. Przechowuje elementy jako pary klucz-wartość. Możesz użyć klawiszy, aby wyszukać odpowiednie wartości. Ponieważ klucze jednoznacznie identyfikują wartości, nie powinno być powtórzeń kluczy.

py_dict = {"Python":"cool!","Learn":True}
py_dict["Python"]
# Output: cool!

py_dict["Learn"]
# Output: True

Funkcjonalnie słownik jest podobny do mapy mieszania. Dlatego niekoniecznie jest to uporządkowana struktura danych. Możesz uzyskać dostęp do zawartości słownika w dowolnej kolejności, o ile znasz klucze.

Porządkowanie pozycji w słowniku

We wcześniejszych wersjach Pythona trzeba było używać an ZamówioneDict aby zachować kolejność kluczy. Jednak od Pythona 3.7 możesz uzyskać dostęp do elementów w tej samej kolejności, w jakiej dodajesz je do słownika.

Teraz, gdy znasz już podstawy słowników Pythona, nauczmy się tworzyć posortowane kopie słownika.

⚙️ Uwaga: Aby kod w tym samouczku działał zgodnie z oczekiwaniami, musisz mieć Pythona w wersji 3.7 lub nowszej. Możesz pobrać najnowsza wersja Pythonalub uruchom przykłady w newsblog.pl Online Python Editor.

Jak posortować słownik Pythona według klucza

Spójrz na poniższy obrazek menu deserów w kawiarni. Istnieją dwie kolumny odpowiadające pozycjom w menu i ich cenom.

Możesz to przedstawić w formie słownika Pythona, zbierając nazwy elementów jako klucze i ich ceny jako wartości.

Przejdźmy dalej i stwórzmy słownikowe desery, jak pokazano poniżej.

desserts = {
    "Ice cream":10,
    "Brownies":12,
    "Cheesecake":3,
    "Swiss roll":5,
    "Cookies":4,
    "Cup cake":2
}

Następnie utwórzmy słownik sorted_desserts, w którym desery są ułożone w kolejności alfabetycznej. W oryginalnym słowniku deserów kluczem są nazwy deserów. Więc powinieneś posortować te klucze w kolejności alfabetycznej, aby utworzyć nowy słownik.

Jak uzyskać dostęp do klawiszy słownika Pythona

Aby to zrobić, najpierw pobierzemy klucze słownika, a następnie posortujemy je w kolejności alfabetycznej.

W Pythonie możesz użyć wbudowanej metody słownikowej .keys(), aby uzyskać listę wszystkich kluczy w słowniku.

Wywołajmy metodę .keys() w słowniku deserów, aby pobrać klucze, jak pokazano poniżej.

keys = desserts.keys()
print(keys)

#Output
['Ice cream', 'Brownies', 'Cheesecake', 'Swiss roll', 'Cookies', 
'Cup cake']

Wywołanie wbudowanej funkcji sorted() Pythona z listą jako argumentem zwraca nową posortowaną listę.

Następnie wywołajmy funkcję sorted() z kluczami listy jako argumentem i przechowajmy posortowaną listę w zmiennej sorted_keys.

sorted_keys = sorted(keys)
print(sorted_keys)

# Output
['Brownies', 'Cheesecake', 'Cookies', 'Cup cake', 'Ice cream', 'Swiss roll']

Teraz, gdy mamy już klucze posortowane w kolejności alfabetycznej, możemy wyszukać wartości odpowiadające kluczom w sorted_keys ze słownika deserów, jak pokazano poniżej.

sorted_desserts = {}
for key in sorted_keys:
  sorted_desserts[key] = desserts[key]

print(sorted_desserts)

# Output
{'Brownies': 12, 'Cheesecake': 3, 'Cookies': 4, 'Cup cake': 2, 
'Ice cream': 10, 'Swiss roll': 5}

Rozwińmy powyższy blok kodu:

  • Zainicjuj sorted_desserts jako pusty słownik Pythona.
  • Przewiń listę kluczy sorted_keys.
  • Dla każdego klucza w sorted_keys dodaj wpis do sorted_desserts, wyszukując odpowiednią wartość w słowniku deserów.

Używanie pętli for w ten sposób jest uważane za gadatliwe. W Pythonie istnieje bardziej zwięzła alternatywa, wykorzystująca rozumienie słownikowe.

Rozumienie słownika w Pythonie

Python obsługuje rozumienie słownikowe, podobne do rozumienia listowego. Zrozumienie słownika umożliwia tworzenie nowego słownika Pythona za pomocą tylko jednego wiersza kodu.

▶️ Oto ogólna konstrukcja do używania rozumienia słownikowego w Pythonie.

# 1. when you have both keys and values in two lists: list1, list2
new_dict = {key:value for key,value in zip(list1,list2)}

# 2. when you have the keys, and can look up the values
new_dict = {key:value for key in <iterable>}

Użyjmy drugiej konstrukcji w powyższej komórce: new_dict = {klucz:wartość klucza w }, aby utworzyć słownik sorted_desserts.

W tym przykładzie:

  • iterowalne: lista sorted_keys
  • klucz: klucz, do którego uzyskujemy dostęp, przechodząc przez posortowane_klucze
  • wartość: wyszukaj wartość odpowiadającą kluczowi ze słownika deserów, desery[key]

Podsumowując, mamy wyrażenie oznaczające rozumienie słownika, jak pokazano poniżej.

sorted_desserts = {key:desserts[key] for key in sorted_keys}
print(sorted_desserts)

{'Brownies': 12, 'Cheesecake': 3, 'Cookies': 4, 'Cup cake': 2, 
'Ice cream': 10, 'Swiss roll': 5}

Z powyższego wyniku, desery są ułożone w kolejności alfabetycznej w słowniku sorted_desserts.

Jak posortować słownik Pythona według wartości

Następnie nauczymy się sortować słownik Pythona według jego wartości.

W słowniku deserów wartości odpowiadają cenom deserów. Możesz posortować słownik według cen, w kolejności rosnącej lub malejącej.

▶️ Możesz użyć wbudowanej metody słownikowej .items(), aby pobrać wszystkie pary klucz-wartość. Każda krotka jest parą klucz-wartość.

desserts.items()

dict_items([('Ice cream', 10), ('Brownies', 12), ('Cheesecake', 3), 
('Swiss roll', 5), ('Cookies', 4), ('Cup cake', 2)])

Każdy z elementów jest sam w sobie krotką. Możesz więc również indeksować każdą parę klucz-wartość, aby uzyskać indywidualny dostęp do kluczy i wartości.

dict_items = desserts.items()
for item in dict_items:
  print(f"key:{item[0]},value:{item[1]}")

# Output
key:Ice cream,value:10
key:Brownies,value:12
key:Cheesecake,value:3
key:Swiss roll,value:5
key:Cookies,value:4
key:Cup cake,value:2

Ponieważ chcielibyśmy sortować według wartości, użyjemy powyższej metody, aby uzyskać wartość o indeksie 1 w parze klucz-wartość.

Jak posortować wartości słownika Pythona w rosnącej kolejności?

Tym razem użyjemy funkcji sorted() wraz z opcjonalnym parametrem key. klucz może być dowolną funkcją Pythona, funkcją wbudowaną, funkcją zdefiniowaną przez użytkownika, a nawet funkcja lambda.

Uwaga: argumenty lambda: wyrażenie jest składnią do definiowania funkcji lambda w Pythonie.

W tym przykładzie sortowania deserów według ceny mamy dostęp do elementów słownika (par klucz-wartość). Ustawimy klucz = lambda item:item[1] jak chcielibyśmy sortować według wartości (ceny).

Ponieważ funkcja sorted() domyślnie zwraca listę, powinieneś jawnie rzutować ją na dict, jak pokazano poniżej.

sorted_desserts = dict(sorted(desserts.items(), key=lambda item:item[1]))
print(sorted_desserts)

{'Cup cake': 2, 'Cheesecake': 3, 'Cookies': 4, 'Swiss roll': 5, 
'Ice cream': 10, 'Brownies': 12}

Możesz także przepisać za pomocą rozumienie ze słownikajak omówiono wcześniej.

sorted_desserts = {key:value for key, value in sorted(desserts.items(), 
key=lambda item:item[1])}

print(sorted_desserts)

# Output
{'Cup cake': 2, 'Cheesecake': 3, 'Cookies': 4, 'Swiss roll': 5, 
'Ice cream': 10, 'Brownies': 12}

W sorted_desserts pierwszą pozycją jest Cup Cake w cenie 2 USD, a ostatnią pozycję Brownies w cenie 12 USD.

Jak posortować wartości słownika Pythona w malejącej kolejności?

Jeśli chcesz posortować ceny w kolejności malejącej, możesz ustawić opcjonalny parametr reverse na True, jak wyjaśniono poniżej.

sorted_desserts = dict(sorted(desserts.items(), key=lambda item:item[1], 
reverse=True))
print(sorted_desserts)

# Output
{'Brownies': 12, 'Ice cream': 10, 'Swiss roll': 5, 'Cookies': 4, 
'Cheesecake': 3, 'Cup cake': 2}

Teraz sorted_desserts zostały posortowane w malejącej kolejności cen, zaczynając od najdroższych deserowych ciastek brownie, które kosztują 12 USD.

Zawijanie 👩🏽‍💻

Podsumujmy szybko wszystko, czego nauczyliśmy się w tym samouczku.

  • Słownik Pythona przechowuje dane w parach klucz-wartość; wszystkie klucze powinny być niepowtarzalne.
  • W procesie sortowania słownika według klucza lub wartości tworzymy nowy słownik, który jest sortowany według potrzeb.
  • Możesz użyć wbudowanych metod słownikowych, .keys() i .items(), aby pobrać odpowiednio wszystkie klucze i pary klucz-wartość.
  • Możesz użyć funkcji sorted() wraz z opcjonalnym kluczem parametrów i odwrócić, aby osiągnąć pożądane sortowanie.

Teraz, gdy nauczyłeś się sortować słowniki Pythona, naucz się sortować listy Pythona. Udanego kodowania!🎉