Tässä opetusohjelmassa opitaan Python-sanakirjan ymmärtämisestä ja sen käytöstä esimerkkien avulla.
Sanakirjat ovat Pythonissa tietotyyppejä, joiden avulla voimme tallentaa tietoja avain / arvo-pariin . Esimerkiksi:
my_dict = (1: 'apple', 2: 'ball')
Lisätietoja heistä on osoitteessa Python Dictionary
Mikä on sanakirjan ymmärtäminen Pythonissa?
Sanakirjan ymmärtäminen on tyylikäs ja ytimekäs tapa luoda sanakirjoja.
Esimerkki 1: Sanakirjan ymmärtäminen
Harkitse seuraavaa koodia:
square_dict = dict() for num in range(1, 11): square_dict(num) = num*num print(square_dict)
Luodaan nyt sanakirja yllä olevaan ohjelmaan sanakirjan ymmärtämisen avulla.
# dictionary comprehension example square_dict = (num: num*num for num in range(1, 11)) print(square_dict)
Molempien ohjelmien tulos on sama.
(1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100)
Molemmissa ohjelmissa olemme luoneet sanaston, square_dict
jossa on numero-neliöavain / arvo-pari .
Sanakirjan ymmärtämisen avulla voimme kuitenkin luoda sanakirjan yhdellä rivillä .
Sanakirjan ymmärtämisen käyttäminen
Edellä olevasta esimerkistä voimme nähdä, että sanakirjan ymmärtäminen tulisi kirjoittaa tietyllä kaavalla.
Pienin syntaksin sanakirjan ymmärtäminen on:
sanakirja = (avain: toistettavien muuttujien arvo)
Verrataan tätä syntaksia sanakirjan ymmärtämiseen yllä olevasta esimerkistä.
Katsotaan nyt, kuinka voimme käyttää sanakirjan ymmärtämistä käyttämällä toisen sanakirjan tietoja.
Esimerkki 3: Kuinka käyttää Sanakirjan ymmärtämistä
#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)
Tuotos
('maito': 0.7752, 'kahvi': 1.9, 'leipä': 1.9)
Täällä voimme nähdä, että haimme tuotteiden hinnat dollareina ja muunnimme ne puntaan. Sanakirjan ymmärtämisen avulla tehtävä on paljon yksinkertaisempi ja lyhyempi.
Ehdolliset sanakirjan ymmärtämisessä
Voimme edelleen mukauttaa sanakirjan ymmärtämistä lisäämällä siihen ehtoja. Katsotaanpa esimerkkiä.
Esimerkki 4: Jos ehdollinen sanakirjan ymmärtäminen
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)
Tuotos
('jack': 38, 'michael': 48)
Kuten näemme, if
sanakirjan ymmärtämisen lausekkeen vuoksi on lisätty vain tasa-arvoisia kohteita .
Esimerkki 5: Moninkertainen, jos ehdollinen sanakirjan ymmärtäminen
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)
Tuotos
('john': 33)
Tässä tapauksessa vain ne kohteet, joiden pariton arvo on alle 40, on lisätty uuteen sanakirjaan.
Se johtuu if
sanakirjan ymmärtämisen monista lausekkeista. Ne vastaavat and
toimintaa, jossa molempien ehtojen on täytyttävä.
Esimerkki 6: if-else ehdollisen sanakirjan ymmärtäminen
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)
Tuotos
('jack': 'nuori', 'michael': 'vanha', 'guido': 'vanha', 'john': 'nuori')
Tässä tapauksessa uusi sanakirja luodaan sanakirjan ymmärtämisen avulla.
Kohteiden, joiden arvo on 40 tai enemmän, arvo on "vanha", kun taas toisten arvo on "nuori".
Sisäkkäinen sanakirjan ymmärtäminen
Voimme lisätä sanakirjan ymmärtämyksiä itse sanakirjojen ymmärtämiseen luoda sisäkkäisiä sanakirjoja. Katsotaanpa esimerkkiä.
Esimerkki 7: Sisäkkäinen sanakirja kahdella sanakirjan ymmärtämisellä
dictionary = ( k1: (k2: k1 * k2 for k2 in range(1, 6)) for k1 in range(2, 5) ) print(dictionary)
Tuotos
(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
Vaikka sanakirjan ymmärtäminen sopii erinomaisesti tyylikkään ja helposti luettavan koodin kirjoittamiseen, ne eivät ole aina oikea valinta.
Meidän on oltava varovaisia käyttäessäsi niitä:
- He voivat joskus tehdä koodista hitaamman ja kuluttaa enemmän muistia.
- Ne voivat myös heikentää koodin luettavuutta.
Emme saa yrittää sovittaa niihin vaikeaa logiikkaa tai suurta määrää sanakirjojen ymmärtämistä vain siksi, että koodi tehdään yksiriviseksi. Näissä tapauksissa on parempi valita muut vaihtoehdot, kuten silmukat.