Gå til innhold

basicpython - lage en 'dictionary'


Anbefalte innlegg

Hei,

 

Naa sitter jeg pa andre siden av verden (Australia) og skal i gang med aa lose en innleveringsoppgave i et programmeringsfag jeg har.

 

Oppgaven er at jeg skal lage en ordbok. Vi har fatt tildelt en tekstfil som bestar av to kolonner med ord, en med engelsk og en med tysk.

 

Jeg har forstaatt (tror jeg) at jeg maa bruke funksjonen 'dictionary', men vet ikke hvordan jeg skal 'fylle' denne med ord fra tekstfilen. Noen som kan sparke meg i riktig retning?

 

 

Vennlig hilsen

 

T

 

edit: sma gramatiske endringer

Endret av Tanus
Lenke til kommentar
Videoannonse
Annonse
Oppgaven er at jeg skal lage en ordbok. Vi har fatt tildelt en tekstfil som bestar av to kolonner med ord, en med engelsk og en med tysk.

 

Jeg har forstaatt (tror jeg) at jeg maa bruke funksjonen 'dictionary', men vet ikke hvordan jeg skal 'fylle' denne med ord fra tekstfilen. Noen som kan sparke meg i riktig retning?

 

Mnja, si det. For det første, det finnes ingen funksjon som heter "dictionary". Det finnes en type, dict (eller types.DictType, om du vil), som kan også brukes for å lage en tom mapping/dictionary/hash table (velg det som du liker best).

 

En ordbok (skal du ha engelsk->tysk, eller engelsk<->tysk?) brukes gjerne slik: man bruker ett ord i et språk man ønsker å oversette fra som en indeks til å finne det ordet man ønsker å oversette til. Mao. skal du ha engelsk->tysk ordbok, så er det rimelig å bruke engelske ord som nøkler og tyske som verdier, slik at oversettelsen for "house" kan slås opp:

 

d = <create English->German dict>
print d["house"]
# -> "Haus"

 

Det du trenger å gjøre da er å lese inn oversettelsespar fra filen, stappe de engelske ordene som nøkler og de tyske som verdiene, og returnere en dict. For å lese det interessante inn, se på file(), read(), "".split() og "".strip().

Lenke til kommentar

Litt av det samme som zotbar1234 er inn på.

 

# variabler 
eng = "one, two, three, four, five"
ger = "eins, zwei, drei, vier, funf" 

# Deler string varibler med komma 
engList = eng.split(", ")
gerList = ger.split(", ")

# lager Dictionary parvis key:value 
eng2ger = dict(zip(engList, gerList))

print eng2ger
# output--> {'four': 'vier', 'three': 'drei', 'five': 'funf', 'two': 'zwei', 'one': 'eins'} 

# Da kan vi f.eksp oversette 
print '"One" is in german:',eng2ger['one']
# output--> "One" is in german: eins

Endret av SNIPPSAT
Lenke til kommentar

Hei,

 

Takker for raske svar, zotbar1234 og SNIPPSAT, dere hjalp meg litt av garde :-)

 

Dataene hentes skal hentes fra en .txt fil og er pa formen:

 

one eins

two zwei

three drei

 

(Tenker hoeyt) altsa disse verdiene ma indekseres. En mulighet er kanskje a ta ut alle de engelske\tyske ordene for a lagre disse verdiene i to lister:

 

eng = "one, two, three"

ger = "eins, zwei, drei"

 

Er det en enkel mate a gjore dette pa?

Endret av Tanus
Lenke til kommentar
Dataene hentes skal hentes fra en .txt fil og er pa formen:

 

one eins

two zwei

three drei

 

(Tenker hoeyt) altsa disse verdiene ma indekseres. En mulighet er kanskje a ta ut alle de engelske\tyske ordene for a lagre disse verdiene i to lister:

 

Det blir nok enklere å stappe parene fortløpende i en dict. For engelsk->tysk, "one" blir nøkkel og "eins" verdi. For tysk->engelsk -- omvendt.

Lenke til kommentar

Provde foerst a direkte stappe parene i en dict., men fikk ikke dette til. Provde da a foerst splitte listen til to lister for a sa lage dict. av listen:

 

english2german = open('english2german.txt', 'r')

eng= []
ger= []

#deffe fungerer ikke helt, far bare ut forbokstavene
for i, line in enumerate(english2german):     
   eng[i:], ger[i:] = line.split()              

engList = eng.split(", ")
gerList = ger.split(", ")

eng2ger = dict(zip(engList, gerList))

 

men ting fungerer ikke enda.

Endret av Tanus
Lenke til kommentar
Provde foerst a direkte stappe parene i en dict., men fikk ikke dette til.

 

Hva er problemet? ("Fikk det ikke til" er ikke en beskrivelse. Du må fortelle 1) hva du vil 2) hva som koden din faktisk gjør 3) hvordan 1 er forskjellig fra 2)).

 

en2de = dict(line.split() for line in open("english2german.txt"))

 

... burde jo være nokså rett frem.

 

Provde da a foerst splitte listen til to lister for a sa lage dict. av listen:

 

Det er krøkkete og unødvendig sløsing med minne.

 

eng= []
ger= []

#deffe fungerer ikke helt, far bare ut forbokstavene
for i, line in enumerate(english2german):	 
eng[i:], ger[i:] = line.split()

 

Ja, nettopp.

 

Det du sier er at listen eng fra posisjon i og utover skal tilordnes enkeltbokstavene fra det første ordet i line. Neppe det du vil. eng.append(line.split()[0]) er antageligvis litt nærmere sannheten.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...