Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Sanakirjakehitelmät | Listojen ja Sanakirjojen Ymmärrykset
Python-Silmukoiden Opas
Osio 4. Luku 3
single

single

Sanakirjakehitelmät

Pyyhkäise näyttääksesi valikon

Sanakirjakehitelmät tarjoavat tiiviin tavan luoda sanakirjoja Pythonissa, samalla tavalla kuin listakehitelmät. Niiden avulla voidaan muuntaa dataa avain-arvo -pareiksi yhdellä koodirivillä.

Perustasolla sanakirjakehitelmä mahdollistaa uuden sanakirjan rakentamisen soveltamalla lauseketta jokaiseen avain-arvo -pariin iteraatiossa olevassa muuttujassa.

{key_expression: value_expression for item in iterable}
  • key_expression: määrittää avaimen jokaiselle avain-arvo -parille;
  • value_expression: määrittää avainta vastaavan arvon;
  • iterable: käsiteltävien alkioiden lähde (esim. lista, range tai muu iteroitava).
Note
Huomio

Toisin kuin listat, sanakirjat vaativat sekä avaimen että arvon, jotka erotetaan kaksoispisteellä (:), ja käyttävät {} hakasulkujen [] sijaan.

12345678910111213141516
travel_wishlist = [ ['Paris', 2000], ['Tokyo', 3000], ['New York', 2500], ['Kyoto', 1500], ['Sydney', 4000] ] # Initialize an empty dictionary travel_budget = {} # Populate the dictionary using a for loop for destination, cost in travel_wishlist: travel_budget[destination] = cost print(travel_budget)

Tämä koodi käy läpi travel_wishlist-listan, jossa jokainen alilista sisältää kohteen ja siihen varatun budjetin. for-silmukka asettaa kohteen avaimena ja budjetin arvona travel_budget-sanakirjaan.

123456789101112
travel_wishlist = [ ['Paris', 2000], ['Tokyo', 3000], ['New York', 2500], ['Kyoto', 1500], ['Sydney', 4000] ] # Create the dictionary using dictionary comprehension travel_budget = {destination: cost for destination, cost in travel_wishlist} print(travel_budget)

Tässä esimerkissä käytetään sanakirjakehitelmää (dictionary comprehension) saman lopputuloksen saavuttamiseksi kuin aiemmassa esimerkissä. Jokaisesta kohteesta tulee avain ja vastaavasta hinnasta arvo travel_budget-sanakirjaan, kaikki yhdellä rivillä.

ValueError-virheen käsittely, kun puretaan alkioita, joissa on enemmän kuin kaksi elementtiä

Kun käytät sanakirjakehitelmiä, purat usein iteroitavan alkioita muuttujiksi avaimia ja arvoja varten. Jos jokainen iteroitavan alkio sisältää enemmän kuin kaksi elementtiä (esimerkiksi lista muodossa [city, country, budget]), yritys purkaa vain kahteen muuttujaan aiheuttaa ValueError-virheen.

Esimerkiksi, jos kirjoitat:

{city: country for city, country in travel_wishlist}

ja travel_wishlist sisältää alilistoja, joissa on kolme elementtiä, Python antaa seuraavan virheen:

ValueError: too many values to unpack (expected 2)

Miksi näin tapahtuu?

  • Python odottaa purkavansa tarkalleen kaksi arvoa (city ja country), mutta jokaisessa alilistassa on kolme.
  • Tämä epäsuhta aiheuttaa ValueError-virheen, jossa ilmoitetaan selkeästi, että arvoja on enemmän kuin odotettiin.

Miten tämän voi ratkaista?

  • Pura kaikki elementit, mutta käytä vain tarvittavat:

for city, country, budget in travel_wishlist — jokainen arvo sijoitetaan omaan muuttujaan.

  • Ohita käyttämättömät arvot alaviivalla:

for city, country, _ in travel_wishlist — alaviiva _ on yleinen tapa merkitä käyttämätön muuttuja.

  • Käytä viipalointia valitaksesi elementit:

for city, country in [item[:2] for item in travel_wishlist] — viipaloi jokainen alilista kahteen ensimmäiseen elementtiin ennen purkamista.

Vastaamalla muuttujien määrällä alkioiden elementtien määrään tai ohittamalla käyttämättömät tiedot vältät purkuvirheet ja pidät sanakirjakehitelmät selkeinä ja luettavina.

1234567891011121314151617181920
# Example data: each tuple has three elements (city, country, budget) travel_wishlist = [ ("Paris", "France", 2000), ("Tokyo", "Japan", 3000), ("New York", "USA", 2500) ] # Attempting to unpack only two variables (incorrect) try: city_to_country = {city: country for city, country in travel_wishlist} except ValueError as e: print("Error:", e) # Correct: unpack all elements, using underscore for unused value city_to_country = {city: country for city, country, _ in travel_wishlist} print("Handled with underscore:", city_to_country) # Correct: use slicing to select only needed elements city_to_country = {item[0]: item[1] for item in travel_wishlist} print("Handled with slicing:", city_to_country)
Tehtävä

Pyyhkäise aloittaaksesi koodauksen

Matkailija haluaa järjestää travel_wishlist-listansa yhdistämällä jokaisen kaupungin nimen sitä vastaavaan maahan. Tämän saavuttamiseksi tehokkaasti sinun tulee muuntaa tiedot sanakirjaksi.

  • Poimi kaupungin nimet ja niitä vastaavat maat travel_wishlist-listasta.
  • Tallenna muodostettu sanakirja muuttujaan city_to_country.

Ratkaisu

Switch to desktopVaihda työpöytään todellista harjoitusta vartenJatka siitä, missä olet käyttämällä jotakin alla olevista vaihtoehdoista
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 3
single

single

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

some-alt