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.
Spis treści:
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
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!🎉