7 svar
245 visningar
mat3ilda behöver inte mer hjälp
mat3ilda 4
Postad: 30 mar 2021 13:55 Redigerad: 30 mar 2021 13:58

Skapa dictionary i en funktion och använda det i en annan

Jag skriver ett program där jag ska skapa ett dictionary från en textfil och sedan använda det i en annan funktion för att jämföra det som finns i mitt dictionary med en input. Mitt problem är att jag inte vet hur jag ska få ut mitt dictionary ur funktionen för att kunna använda det i den andra funktionen. Jag undrar om det är möjligt att göra så som jag har tänkt. Här är funktionen jag har som skapar mitt dictionary:

def read_animals_from_file(file_name):
'''
Läser in djuren och dess egenskaper.
:param file_name: Namnet på filen som läses in.
:return: Dictionary med djuren och dess egenskaper.
'''

animal_dict = {}

fobj = open(file_name, "r")
for line in fobj:
key , value1 , value2 , value3 , value4 = line.split("/")
animal_dict[key] = value1, value2, value3, value4

return animal_dict

 

Hur "importerar" man animal_dict till en annan funktion?

Laguna 30518
Postad: 30 mar 2021 15:58

Det ser ut som om du gör just det du vill: funktionen returnerar din dict().

Så någonstans står det typ

     d = read_animals_from_file("djurfil")
     hantera_djur(d)

?

mat3ilda 4
Postad: 30 mar 2021 16:21 Redigerad: 30 mar 2021 16:23
Laguna skrev:

Det ser ut som om du gör just det du vill: funktionen returnerar din dict().

Så någonstans står det typ

     d = read_animals_from_file("djurfil")
     hantera_djur(d)

?

Jag gjorde en funktion som innehåller detta:

def compare_time(an_dict):

wake_up_time = an_dict[2]

print(wake_up_time)

return

Funktionen är inte klar och gör inte det den ska än, men först och främst vill jag lösa att jag får KeyError. Oavsett om jag försöker skriva in siffror för elementen i mitt dictionary eller om jag skriver in själva namnet på min key får jag samma error. Undrar om det beror på att jag får en tuple (?) med flera egenskaper för djuret i ett value? Är väldigt ny på detta så känner inte att jag har koll alls.

Har även detta längst ner i koden: read_animals_from_file("animals_on_zoo.txt") , men vet ej hur jag ska "få ihop" koden.

Laguna 30518
Postad: 30 mar 2021 18:33

Var kommer din an_dict ifrån?

mat3ilda 4
Postad: 30 mar 2021 19:55
Laguna skrev:

Var kommer din an_dict ifrån?

Jag tänkte att det skulle vara en ny variabel så att jag sedan kunde skriva compare_time(animal_dict) när jag kallar på funktionen, men det kanske är helt fel tänkt?

Laguna 30518
Postad: 30 mar 2021 20:18

Det är tydligen en dict i alla fall, eftersom det blir Key error.

Hur sätter du dess värde?

mat3ilda 4
Postad: 31 mar 2021 12:28
Laguna skrev:

Det är tydligen en dict i alla fall, eftersom det blir Key error.

Hur sätter du dess värde?

Jag har inte skrivit mer i funktionerna än det jag har postat, så jag vet inte riktigt hur jag ska göra mer. Tror kanske inte riktigt jag förstår din fråga. Textfilen är skriven på följande format: Type / hibernation / wake_up_time / sleep_time / feeding_time , där type är key och value blir de andra tillsammans i vad jag tror kallas en tuple.

Lindehaven 820 – Lärare
Postad: 31 mar 2021 14:51

I an_dict måste det finnas en nyckel med värdet 2 för att wake_up_time = an_dict[2] ska fungera. Om nyckeln inte finns fås KeyError. Prova att anropa din funktion med en giltig dictionary: compare_time({2: (3,4,5,6)})

I funktionen så blir alla nycklar och värden till strängar: key , value1 , value2 , value3 , value4 = line.split("/"). Du vill kanske göra om dem/några till heltal eller decimaltal?

Det finns flera sätt att hantera om nyckeln finns eller ej, se exvis på This Pointer.

Svara
Close