Gå til innhold

basicpython - lage en 'dictionary'


Anbefalte innlegg

Skrevet (endret)

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
Videoannonse
Annonse
Skrevet
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().

Skrevet (endret)

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
Skrevet (endret)

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
Skrevet
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.

Skrevet (endret)

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
Skrevet

skal gå med noe slikt inne i løkka:

 

eng, ger = line.split()

eng2ger[eng] = ger

 

Er en stund siden jeg gjorde noe i python, men tror du lager en dict med eng2ger = {}, på samme måte som [] gir en list og () et tuple.

Skrevet
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.

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å
×
×
  • Opprett ny...