Schlüsselnamen anstatt Wert in Liste speichern

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
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

Hallo! Ich programmiere mir gerade einen Vokabeltrainer. Ich speicher die Vokabeln als Wörterbücher mit ``pickle``. Wenn ich die Vokabel richtig eingebe, dann soll die Vokabel aus dem Wörterbuch verschwinden, ansonsten bleibt sie drin. Ich habe mir überlegt eine Liste zu haben, in der die Schlüssel (!) der Vokabeleinträge, die weg dürfen, gespeichert werden und am Ende sollen die Einträge, so wie ich sie im Quelltext zu löschen versuche, entfernt werden. Aber mir wird ja immer der Wert des Schlüssels in der Liste gespeichert. Wie kann ich den Schlüsselnamen speichern?

Code: Alles auswählen

#!/usr/bin/env python

import os
import cPickle as p

with open('list.pickle', 'r') as f:
    vocabulary = p.load(f)

to_delete = []

for key in vocabulary:
    quest = raw_input("Was bedeutet {0} auf Deutsch? ".format(key))
    if quest == vocabulary.get(key):
        print "Gut gemacht, richtig!"
        to_delete.append(vocabulary[key])
        # Ich moechte hier den Schluesselnamen und nicht den Wert!
    else:
        print "Schade, es ist falsch!"

for element in to_delete:
    del vocabulary[element]
    # Funktioniert natuerlich nicht. Ein KeyError wird stattdessen ausgegeben.

# Und hier wird dann spaeter der Teil mit pickle reinkommen
print vocabulary
EDIT: Bitte nur Lösungsansätze posten. Ich möchte auch etwas selber herausfinden, etwas dabei lernen :)
Zuletzt geändert von nomnom am Donnerstag 4. November 2010, 17:43, insgesamt 1-mal geändert.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Code: Alles auswählen

to_delete.append(key)
Edit: Ach ja, benutze besser:

Code: Alles auswählen

for key, value in vocabulary.iteritems():
    quest = raw_input("Was bedeutet {0} auf Deutsch? ".format(key))
    if quest == value:
        ...
Zuletzt geändert von EyDu am Donnerstag 4. November 2010, 17:46, insgesamt 1-mal geändert.
Das Leben ist wie ein Tennisball.
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

EyDu hat geschrieben:

Code: Alles auswählen

to_delete.append(key)
LOL, da änder ich grad den ersten Post, dass ich nur Lösungsansätze haben will, und zeitgleich kommt das :mrgreen:

Wow, meine Doofheit ist unbeschreiblich :D Das ich nach etwas kompliziertem suche, obwohl die Lösung ja ganz einfach ist :O

EDIT:
EyDu hat geschrieben:Edit: Ach ja, benutze besser:

Code: Alles auswählen

for key, value in vocabulary.iteritems():
    quest = raw_input("Was bedeutet {0} auf Deutsch? ".format(key))
    if quest == value:
        ...
Oh, dass man Ausdrücke wie

Code: Alles auswählen

for key, value in vocabulary.iteritems()
haben kann, war mir nicht bewusst. Ich werde es mir merken, auch wenn ich leider nicht vollkommen verstehe wie das funktioniert :|
Zuletzt geändert von nomnom am Donnerstag 4. November 2010, 17:48, insgesamt 1-mal geändert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

``iteritems()`` gibt eine Seqzuenz von Tupeln zurück, über diese wird dann mittels der ``for``-Schleife iteriert und dann kommt Tuple-Unpacking ins Spiel. Mit Tuple-Unpacking geht etwa sowas

Code: Alles auswählen

a, b = (23, 42)
(in diesem Fall würde man die Klappern üblicherweise weglassen, aber merk dir einfach dass man bei der Zuweisung von Tupel-Objekten auch auf die einzelnen Elemente des Tupels zugreifen kann)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

Leonidas hat geschrieben:``iteritems()`` gibt eine Seqzuenz von Tupeln zurück, über diese wird dann mittels der ``for``-Schleife iteriert und dann kommt Tuple-Unpacking ins Spiel. Mit Tuple-Unpacking geht etwa sowas

Code: Alles auswählen

a, b = (23, 42)
(in diesem Fall würde man die Klappern üblicherweise weglassen, aber merk dir einfach dass man bei der Zuweisung von Tupel-Objekten auch auf die einzelnen Elemente des Tupels zugreifen kann)
Vielen vielen Dank :-) Jetzt hab ichs
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Leonidas hat geschrieben:

Code: Alles auswählen

a, b = (23, 42)
(in diesem Fall würde man die Klappern üblicherweise weglassen, […])
Gut, dann klappert es auch nicht so laut :lol:
Antworten