12 svar
172 visningar
destiny99 behöver inte mer hjälp
destiny99 7948
Postad: 2 aug 2023 23:44 Redigerad: 2 aug 2023 23:55

Dictionaries övning

Hej!

Jag förstår ej vad felmeddelandet försöker säga när jag gör på det sättet i andra  bilden visar.  Medan den reagerar ej likadant när jag separerar dem med variabelnamnet och upprepar den (första bilden)? Jag tolkar felmeddelandet som att nyckelordet "1" vars värde är "One" måste vara ett nummer.

Fermatrix 7841 – Fd. Medlem
Postad: 3 aug 2023 00:03

Det du försöker göra har ingen betydelse för en dict. 

En dictionary mappar en nyckel till ett värde, därför fungerar dict[key], vilket hämtar motsvarande värde.

Du kan göra exempelvis så här:

person_info = {
    "name": "John",
    "age": 36,
    "country": "Norway"
}

desired_attributes = ("name", "country")
extracted_values = [person_info[attr] for attr in desired_attributes if attr in person_info]

print(extracted_values)
destiny99 7948
Postad: 3 aug 2023 00:06 Redigerad: 3 aug 2023 00:08
Dracaena skrev:

Det du försöker göra har ingen betydelse för en dict. 

En dictionary mappar en nyckel till ett värde, därför fungerar dict[key], vilket hämtar motsvarande värde.

Du kan göra exempelvis så här:

person_info = {
    "name": "John",
    "age": 36,
    "country": "Norway"
}

desired_attributes = ("name", "country")
extracted_values = [person_info[attr] for attr in desired_attributes if attr in person_info]

print(extracted_values)

Vad menar du med dic[key]? Sen förstår jag ej de sista två variablerna du skapade. Varför har du for och if loop tilldelade som värde till extracted_values variabeln? Är mitt sätt med flera parameter rätt också dvs print(phone_numbers["1"], phone_numbers["2"] osv)

Fermatrix 7841 – Fd. Medlem
Postad: 3 aug 2023 02:35 Redigerad: 3 aug 2023 02:38

Det beror på vad du menar med din fråga. I bild 1, fungerar inte koden som du förväntade dig? I bild 2 har du ett missförstånd om hur dictionaries fungerar i Python.

Ditt försök med dict[x][x1]...[n] är inte korrekt för att hämta värden från en dictionary. I grund och botten kopplar en dictionary en nyckel (key) till ett värde (value). Så när du använder dict[key] hämtar du värdet som är kopplat till den specifika nyckeln.

Det koden ovan gör är att den skapar en tuple med nycklarna 'name' och 'country'. Därefter går den igenom varje nyckel i vår tuple (via en for-loop) och om den nyckeln finns i person_info, läggs den till i extracted_values-listan.

Om du istället vill se alla nycklar i en dictionary kan du enkelt använda dictionary.keys().

CurtJ 1201
Postad: 3 aug 2023 06:10

Bara för att komplettera det Dracaena skriver betyder ditt sätt att referera phone_numbers att du väljer första elementet med phone_numbers["1"] och det ger resultatet strängen "One". När du sen lägger till ["2"] så tolkar python det som att du refererar ett tecken i strängen och då måste du använda ett heltal som argument. Det korrekta sättet OM du är ute efter det tredje tecknet i det refererade dict-elementet är phone_numbers["1"][2] som borde ge dig tecknet "e". De följande två parenteserna ["3"]["4"] har ingen mening. Om du vill skriva ut värden i alla dict-elementet på ditt sätt kan du skriva 

print (phone_numbers["1"],phone_numbers["2"], phone_numbers["3"],phone_numbers["4"])

Sen kan man ju allmänt säga att nycklarna bör ha värden som säger något om innehållet som i Dracaenas exempel. Om du har nycklar som innehåller index som i ditt fall är en lista ett bättre alternativ för lagring men du skulle ju öva på dictionaries så det må va hänt i det här fallet. 

destiny99 7948
Postad: 3 aug 2023 09:44 Redigerad: 3 aug 2023 09:46
CurtJ skrev:

Bara för att komplettera det Dracaena skriver betyder ditt sätt att referera phone_numbers att du väljer första elementet med phone_numbers["1"] och det ger resultatet strängen "One". När du sen lägger till ["2"] så tolkar python det som att du refererar ett tecken i strängen och då måste du använda ett heltal som argument. Det korrekta sättet OM du är ute efter det tredje tecknet i det refererade dict-elementet är phone_numbers["1"][2] som borde ge dig tecknet "e". De följande två parenteserna ["3"]["4"] har ingen mening. Om du vill skriva ut värden i alla dict-elementet på ditt sätt kan du skriva 

print (phone_numbers["1"],phone_numbers["2"], phone_numbers["3"],phone_numbers["4"])

Sen kan man ju allmänt säga att nycklarna bör ha värden som säger något om innehållet som i Dracaenas exempel. Om du har nycklar som innehåller index som i ditt fall är en lista ett bättre alternativ för lagring men du skulle ju öva på dictionaries så det må va hänt i det här fallet. 

Ja precis det var så jag gjorde för att få det att fungera. Men då är det bäst att hålla sig till print(phone_numbers["1"],osv). Jaha så när jag skriver ["1"]["2"] så tolkar den som att jag refererar till en tecken i strängen. Men vilken tecken isåfall? 

destiny99 7948
Postad: 3 aug 2023 09:47 Redigerad: 3 aug 2023 09:50
Dracaena skrev:

Det beror på vad du menar med din fråga. I bild 1, fungerar inte koden som du förväntade dig? I bild 2 har du ett missförstånd om hur dictionaries fungerar i Python.

Ditt försök med dict[x][x1]...[n] är inte korrekt för att hämta värden från en dictionary. I grund och botten kopplar en dictionary en nyckel (key) till ett värde (value). Så när du använder dict[key] hämtar du värdet som är kopplat till den specifika nyckeln.

Det koden ovan gör är att den skapar en tuple med nycklarna 'name' och 'country'. Därefter går den igenom varje nyckel i vår tuple (via en for-loop) och om den nyckeln finns i person_info, läggs den till i extracted_values-listan.

Om du istället vill se alla nycklar i en dictionary kan du enkelt använda dictionary.keys().

Asså jag vet hur dic fungerar grundligt efter videon o hemsidan jag kollade på. Jag ville bara förstå felmeddelandet samt varför jag ej får skriva på det sättet jag gjorde i början som då är fel. I bild 1 fungerar min kod men i bild 2 fungerar ej min kod. Det är bild 2 jag är ute efter.

Laguna Online 30510
Postad: 3 aug 2023 10:03
destiny99 skrev:
CurtJ skrev:

Bara för att komplettera det Dracaena skriver betyder ditt sätt att referera phone_numbers att du väljer första elementet med phone_numbers["1"] och det ger resultatet strängen "One". När du sen lägger till ["2"] så tolkar python det som att du refererar ett tecken i strängen och då måste du använda ett heltal som argument. Det korrekta sättet OM du är ute efter det tredje tecknet i det refererade dict-elementet är phone_numbers["1"][2] som borde ge dig tecknet "e". De följande två parenteserna ["3"]["4"] har ingen mening. Om du vill skriva ut värden i alla dict-elementet på ditt sätt kan du skriva 

print (phone_numbers["1"],phone_numbers["2"], phone_numbers["3"],phone_numbers["4"])

Sen kan man ju allmänt säga att nycklarna bör ha värden som säger något om innehållet som i Dracaenas exempel. Om du har nycklar som innehåller index som i ditt fall är en lista ett bättre alternativ för lagring men du skulle ju öva på dictionaries så det må va hänt i det här fallet. 

Ja precis det var så jag gjorde för att få det att fungera. Men då är det bäst att hålla sig till print(phone_numbers["1"],osv). Jaha så när jag skriver ["1"]["2"] så tolkar den som att jag refererar till en tecken i strängen. Men vilken tecken isåfall? 

phone_numbers["1"][2] hade refererat till tecknet med index 2 i strängen phone_numbers["1"]. Indexet "2" går däremot inte, det är därför du får ett felmeddelande.

destiny99 7948
Postad: 3 aug 2023 10:42
Laguna skrev:
destiny99 skrev:
CurtJ skrev:

Bara för att komplettera det Dracaena skriver betyder ditt sätt att referera phone_numbers att du väljer första elementet med phone_numbers["1"] och det ger resultatet strängen "One". När du sen lägger till ["2"] så tolkar python det som att du refererar ett tecken i strängen och då måste du använda ett heltal som argument. Det korrekta sättet OM du är ute efter det tredje tecknet i det refererade dict-elementet är phone_numbers["1"][2] som borde ge dig tecknet "e". De följande två parenteserna ["3"]["4"] har ingen mening. Om du vill skriva ut värden i alla dict-elementet på ditt sätt kan du skriva 

print (phone_numbers["1"],phone_numbers["2"], phone_numbers["3"],phone_numbers["4"])

Sen kan man ju allmänt säga att nycklarna bör ha värden som säger något om innehållet som i Dracaenas exempel. Om du har nycklar som innehåller index som i ditt fall är en lista ett bättre alternativ för lagring men du skulle ju öva på dictionaries så det må va hänt i det här fallet. 

Ja precis det var så jag gjorde för att få det att fungera. Men då är det bäst att hålla sig till print(phone_numbers["1"],osv). Jaha så när jag skriver ["1"]["2"] så tolkar den som att jag refererar till en tecken i strängen. Men vilken tecken isåfall? 

phone_numbers["1"][2] hade refererat till tecknet med index 2 i strängen phone_numbers["1"]. Indexet "2" går däremot inte, det är därför du får ett felmeddelande.

 Menar du att den refererar till e som då är från strängen "One"? Jag har för mig den hade printat ut e om det är phone_numbers["1"][2], men index ["2"] finns ju ej om man skriver bredvid ["1"] som jag gjorde i bild 2.

Laguna Online 30510
Postad: 3 aug 2023 10:43

Du verkar ha förstått, men du ställer en fråga. Vad är det du undrar?

destiny99 7948
Postad: 3 aug 2023 10:45
Laguna skrev:

Du verkar ha förstått, men du ställer en fråga. Vad är det du undrar?

Nej jag undrade bara felmeddelandet och jag förstår nu.

Fermatrix 7841 – Fd. Medlem
Postad: 3 aug 2023 10:55

Felet du gjorde på bild 2 var svårt att tolka (eftersom vi inte riktigt vet vad du försökte åstadkomma). Det är av den anledningen jag svarade dig tidigare: 

destiny99 skrev:

.... Är mitt sätt med flera parameter rätt också dvs print(phone_numbers["1"], phone_numbers["2"] osv)

Dracaena skrev:

Det beror på vad du menar med din fråga. I bild 1, fungerar inte koden som du förväntade dig?

När koden kompileras och kör utan problem, tyder det på att den fungerar. Din fråga ger intrycket att du kanske inte fullt ut förstår vad som händer, även om detta kanske inte är fallet. Gällande bild 2, utan att känna till dina tankar är det svårt för oss att veta vad du vill uppnå. CurtJ insåg att du eventuellt menade något annat än vad jag initialt trott. Vad som framgår i bild 2 kan tolkas på olika sätt beroende på det misstag du kan ha gjort. Din tidigare fråga om dict[key] indikerar att du kanske inte är helt bekant med hur en dictionary fungerar. Detta märks också i inlägg #9.

Du verkar nu ha en bättre förståelse för problemet med bild 2, och du har fått några metoder för att lösa det. Om det finns något du undrar över, dela gärna med dig av din kod och beskriv exakt vad du vill att den ska göra. Det gör det enklare för oss att hjälpa dig. :)


destiny99 7948
Postad: 3 aug 2023 11:05 Redigerad: 3 aug 2023 11:09
Dracaena skrev:

Felet du gjorde på bild 2 var svårt att tolka (eftersom vi inte riktigt vet vad du försökte åstadkomma). Det är av den anledningen jag svarade dig tidigare: 

destiny99 skrev:

.... Är mitt sätt med flera parameter rätt också dvs print(phone_numbers["1"], phone_numbers["2"] osv)

Dracaena skrev:

Det beror på vad du menar med din fråga. I bild 1, fungerar inte koden som du förväntade dig?

När koden kompileras och kör utan problem, tyder det på att den fungerar. Din fråga ger intrycket att du kanske inte fullt ut förstår vad som händer, även om detta kanske inte är fallet. Gällande bild 2, utan att känna till dina tankar är det svårt för oss att veta vad du vill uppnå. CurtJ insåg att du eventuellt menade något annat än vad jag initialt trott. Vad som framgår i bild 2 kan tolkas på olika sätt beroende på det misstag du kan ha gjort. Din tidigare fråga om dict[key] indikerar att du kanske inte är helt bekant med hur en dictionary fungerar. Detta märks också i inlägg #9.

Du verkar nu ha en bättre förståelse för problemet med bild 2, och du har fått några metoder för att lösa det. Om det finns något du undrar över, dela gärna med dig av din kod och beskriv exakt vad du vill att den ska göra. Det gör det enklare för oss att hjälpa dig. :)


Ja jag får beskriva vad uppgiften handlar om och vad det är tänkt man skall göra. 

Svara
Close