Seite 1 von 1

Keys von Values aus Dict. auslesen//exit mit 'Enter'

Verfasst: Donnerstag 12. Juni 2008, 21:31
von Janux
Hallo !
Gibt eine elegantere Lösung, um an die Keys von Values aus einem Dictionary heranzu kommen?
Außerdem würde ich gerne das Programm durch die Eingabe von "Enter" beenden.
Ich habe es mit "if _eingabe_ == chr(13)" usw. versucht aber es hat leider nicht geklappt.

Code: Alles auswählen

# -*- coding: cp1252 -*-

woerter = {"Germany":"Deutschland", "Spain":"Spanien", "France":"Frankreich",}
print "(Das Programm kann mit 'q' beendet werden)"
print

while True:
    wort = raw_input("Geben Sie ein Wort ein: ")
    if wort ==  "q": # ...drücken der Eingabetaste
        break
    if wort in woerter:
        print "Das deutsche Wort lautet:", woerter[wort]
        print

# Es wird eine Liste aus den Values erzeugt und mit dem Index der passende
# Key aus der Liste der Keys herrausgefunden

    if wort in woerter.values():
            a = woerter.values().index(wort)
            print "Das englische Wort lautet: ", woerter.keys().pop(a)
            print  
    
    if wort not in woerter and wort not in woerter.values():
        print "Das Wort ist unbekannt."
        print

mfg Janux

Verfasst: Donnerstag 12. Juni 2008, 21:51
von Trundle
Man könnte einfach eine zweites dict aus dem ersten erstellen, nur dass dort eben Schlüssel und Wert vertauscht werden, z.B. mit

Code: Alles auswählen

woerter_e = dict(((v, k) for k, v in woerter.iteritems()))
Und dann eben mit dem dict arbeiten, wenn man En->De haben will.
Allerdings, wenn zwei Wörter die gleiche Übersetzung haben, geht damit eine Übersetzung verloren.

Zum Beenden, indem man einfach Enter drückt, muss man einfach nur überprüfen, ob ``wort`` ein leerer String ist, z.B. mit

Code: Alles auswählen

if not wort:
    break

Verfasst: Donnerstag 12. Juni 2008, 21:51
von veers
Erstelle zwei Dictionaries:

Eine Deutsch Englisch eines Englisch Deutsch ;)

Zum Kommentar von Trundle,
Für den Fall könnte man ja das Multidict von Werkzeug verwenden.

Verfasst: Donnerstag 12. Juni 2008, 21:54
von Karl
Du kannst ein Programm mit ctrl+c beenden.
Wenn du's nicht ganz beenden willst, also nur einen Schleifendurchlauf, dann benutze doch einfach eine Exception.
Except KeyboardInterrupt :)
Edit: Okay 1. zu langsam, 2. Ist das mit dem leerem String wohl sinnvoller, aber bietet sich eventuell nicht immer an. Hier aber wahrscheinlich schon ;)

Verfasst: Freitag 13. Juni 2008, 20:34
von Janux
Danke für die Antworten!