You are viewing a single comment's thread:

RE: Python / Problem: Die Katze beißt sich in den Schwanz

Ich weiss nicht, ob ich das Richtig verstanden habe mit der Nummer zum löschen eines Eintrages. Hier mal ein Fragment wie man eine Nummer eingeben kann um ein Eintrag aus dem dictionary zu löschen. Die Nummern werden jedesmal beim ausführen der Anwendung neu vergeben. Es muss nichts gespeichert werden, außer das veränderte Dictionary als JSON.

# Struktur der JSON Datei falls ich es richtig verstanden habe
jsondata = {"01.01.2000" : ["Apfel", "Birne"], "02.01.2000" : ["Eisen", "Honig"]}

# Während dieser Anwendung
application_data = {}

class Lebensmittel:

    def __init__(self, id, date, productname):
        self.date = date # Ablaufdatum
        self.id = id # eindeutige Nummer wird vergeben, während des Einlesens der JSON-Datei
        self.prodcutname = productname # Lebensmittelname

    def getNumber(self):
        return self.id # Lebensmittel mit der eingegebenen Zahl wird ermittelt

    def __repr__(self):
        return f'{self.id, self.prodcutname}'

def deleteWithNumber(number):
    entryToRemove = None
    for values in application_data.values():
        actualEntry = values
        for elem in actualEntry:
            # Suche nach der eingegebenen Nummer
            if elem.getNumber() == number:
                entryToRemove = elem
                break
        break
    if entryToRemove is not None:
        application_data[entryToRemove.date].remove(entryToRemove)


if __name__ == '__main__':
    id = 1 # erhöhe um 1 in der inneren Schleife, pro Lebensmittel. Kein speichern nötig.
    for key, value in jsondata.items():
        entries_with_numbers = []
        for entry in value:
            entries_with_numbers.append(Lebensmittel(id, key, entry))
            id += 1
        application_data.update({key: entries_with_numbers})

    # Vorher
    for k, v in application_data.items():
        print(k, v)

    deleteWithNumber(2) # Beispiel: Lebensmittel mit der Nummer 2 wird gelöscht

    # Nachher
    for k, v in application_data.items():
        print(k, v)
0.00260554 BEE
1 comments

Danke Ozelot; ich kann gar nicht sagen ob das stimmt was du schreibst. Ich bin mit dem Bereich der Klassen noch sehr wenig vertraut.

Der Mechanismus soll quasi einen Integer (beginnend mit 0 oder 1) immer +1 erhöhen, wenn der User ein Nahrugsmittel eingibt. Problem ist bei mir, dass ich es nur schaffe, innerhalb einer Session diese Nummern hochzuschieben. Beim nächsten Start habe ich quasi einen reset.

0E-8 BEE

Ah, so meinst du das mit der Nummer. Das beste wäre, wenn du in dieser JSON-Datei die du für die Lebensmittel hast diese Nummer separat mit abspeicherst. Wenn du in der Anwendung dann ein neues Nahrungsmittel hinzufügst, erhöhst du die Zahl um 1. Beim speichern der JSON-Datei überschreibst du den vorher eingelesenen Wert, hier im Beispiel counter, mit dem neuen Wert. Und beim nächsten einlesen der JSON-Datei hast du dann die letzte Zahl die du in der letzten Sesson verwendet hast.

Zum Beispiel so hier:

{
    "counter" : 0,
    [
        {
            "ablaufdatum" : "01.01.2000",
            "produkt" : "Apfel"
        },
        {
            "ablaufdatum" : "01.01.2000",
            "produkt" : "Birne"
        },
        {
            "ablaufdatum" : "05.01.2000",
            "produkt" : "Pflaume"
        },
        {
            "ablaufdatum" : "05.01.2000",
            "produkt" : "Zitrone"
        }
    ]
}
0.00132440 BEE