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).
Toisin kuin listat, sanakirjat vaativat sekä avaimen että arvon, jotka erotetaan kaksoispisteellä (:), ja käyttävät {} hakasulkujen [] sijaan.
12345678910111213141516travel_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.
123456789101112travel_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 (
cityjacountry), 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)
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
Kiitos palautteestasi!
single
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme