Rozumienie słownika Pythona

W tym samouczku dowiemy się, jak rozumieć słownik Pythona i jak go używać, korzystając z przykładów.

Słowniki to typy danych w Pythonie, które pozwalają nam przechowywać dane w parze klucz / wartość . Na przykład:

 my_dict = (1: 'apple', 2: 'ball') 

Aby dowiedzieć się więcej o nich, odwiedź: Słownik Pythona

Co to jest rozumienie ze słownika w Pythonie?

Rozumienie słownikowe to elegancki i zwięzły sposób tworzenia słowników.

Przykład 1: Rozumienie słownika

Rozważ następujący kod:

 square_dict = dict() for num in range(1, 11): square_dict(num) = num*num print(square_dict) 

Teraz stwórzmy słownik w powyższym programie, używając rozumienia słownikowego.

 # dictionary comprehension example square_dict = (num: num*num for num in range(1, 11)) print(square_dict) 

Dane wyjściowe obu programów będą takie same.

 (1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100)

W obu programach stworzyliśmy słownik square_dictz parą klucz-wartość liczba-kwadrat .

Jednak użycie rozumienia słownikowego pozwoliło nam stworzyć słownik w jednej linii .

Korzystanie ze słownika

Z powyższego przykładu widzimy, że rozumienie słownikowe powinno być zapisane w określonym wzorze.

Minimalna składnia rozumienia ze słownika to:

 słownik = (klucz: wartość zmiennej w iterowalnej) 

Porównajmy tę składnię ze zrozumieniem słownikowym z powyższego przykładu.

Zobaczmy teraz, jak możemy wykorzystać rozumienie słownikowe przy użyciu danych z innego słownika.

Przykład 3: Jak korzystać ze słownika

 #item price in dollars old_price = ('milk': 1.02, 'coffee': 2.5, 'bread': 2.5) dollar_to_pound = 0.76 new_price = (item: value*dollar_to_pound for (item, value) in old_price.items()) print(new_price) 

Wynik

 („mleko”: 0,7752, „kawa”: 1,9, „chleb”: 1,9) 

Tutaj widzimy, że pobraliśmy ceny przedmiotów w dolarach i przeliczyliśmy je na funty. Korzystanie ze słownika znacznie upraszcza i skraca to zadanie.

Warunki warunkowe w rozumieniu słownika

Możemy dodatkowo dostosować rozumienie słownika, dodając do niego warunki. Spójrzmy na przykład.

Przykład 4: Jeśli warunkowe rozumienie ze słownika

 original_dict = ('jack': 38, 'michael': 48, 'guido': 57, 'john': 33) even_dict = (k: v for (k, v) in original_dict.items() if v % 2 == 0) print(even_dict) 

Wynik

 ('jack': 38, 'michael': 48) 

Jak widać, ze względu na ifklauzulę w rozumieniu słownikowym zostały dodane tylko pozycje o parzystej wartości .

Przykład 5: Wielokrotne, jeśli warunkowe rozumienie ze słownika

 original_dict = ('jack': 38, 'michael': 48, 'guido': 57, 'john': 33) new_dict = (k: v for (k, v) in original_dict.items() if v % 2 != 0 if v < 40) print(new_dict) 

Wynik

 („jan”: 33) 

W tym przypadku do nowego słownika zostały dodane tylko pozycje o nieparzystej wartości mniejszej niż 40.

Dzieje się tak z powodu wielu ifklauzul w rozumieniu słownikowym. Są równoważne anddziałaniu, w którym oba warunki muszą być spełnione.

Przykład 6: warunkowe rozumienie ze słownika if-else

 original_dict = ('jack': 38, 'michael': 48, 'guido': 57, 'john': 33) new_dict_1 = (k: ('old' if v> 40 else 'young') for (k, v) in original_dict.items()) print(new_dict_1) 

Wynik

 ('jack': 'młody', 'michael': 'stary', 'guido': 'stary', 'john': 'młody') 

W tym przypadku nowy słownik jest tworzony poprzez rozumienie słownikowe.

Pozycje o wartości 40 lub więcej mają wartość „stare”, podczas gdy inne mają wartość „młode”.

Zagnieżdżone rozumienie słownika

Możemy dodawać wyrażenia słownikowe do wyrażeń słownikowych, aby tworzyć zagnieżdżone słowniki. Spójrzmy na przykład.

Przykład 7: Zagnieżdżony słownik z dwoma wyrażeniami słownikowymi

 dictionary = ( k1: (k2: k1 * k2 for k2 in range(1, 6)) for k1 in range(2, 5) ) print(dictionary) 

Wynik

 (2: (1: 2, 2: 4, 3: 6, 4: 8, 5: 10), 3: (1: 3, 2: 6, 3: 9, 4: 12, 5: 15), 4: (1: 4, 2: 8, 3: 12, 4: 16, 5: 20)) 

As you can see, we have constructed a multiplication table in a nested dictionary, for numbers from 2 to 4.

Whenever nested dictionary comprehension is used, Python first starts from the outer loop and then goes to the inner one.

So, the above code would be equivalent to:

 dictionary = dict() for k1 in range(11, 16): dictionary(k1) = (k2: k1*k2 for k2 in range(1, 6)) print(dictionary) 

It can further be unfolded:

 dictionary = dict() for k1 in range(11, 16): dictionary(k1) = dict() for k2 in range(1, 6): dictionary(k1)(k2) = k1*k2 print(dictionary) 

All these three programs give us the same output.

Advantages of Using Dictionary Comprehension

As we can see, dictionary comprehension shortens the process of dictionary initialization by a lot. It makes the code more pythonic.

Using dictionary comprehension in our code can shorten the lines of code while keeping the logic intact.

Warnings on Using Dictionary Comprehension

Mimo że wyrażenia słownikowe świetnie nadają się do pisania eleganckiego, łatwego do odczytania kodu, nie zawsze są właściwym wyborem.

Należy zachować ostrożność podczas używania ich jako:

  • Czasami mogą spowolnić działanie kodu i zająć więcej pamięci.
  • Mogą również zmniejszyć czytelność kodu.

Nie możemy próbować zmieścić w nich trudnej logiki lub dużej liczby pojęć słownikowych tylko po to, aby kod był jednowierszowy. W takich przypadkach lepiej jest wybrać inne alternatywy, takie jak pętle.

Interesujące artykuły...