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?
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)
?
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.
Var kommer din an_dict ifrån?
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?
Det är tydligen en dict i alla fall, eftersom det blir Key error.
Hur sätter du dess värde?
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.
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.