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

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Janux
User
Beiträge: 78
Registriert: Donnerstag 12. Juni 2008, 21:11

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
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

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
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

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.
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Karl
User
Beiträge: 252
Registriert: Freitag 29. Juni 2007, 17:49

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 ;)
Janux
User
Beiträge: 78
Registriert: Donnerstag 12. Juni 2008, 21:11

Danke für die Antworten!
Antworten