Objekte aus json löschen

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
nathan6
User
Beiträge: 17
Registriert: Montag 7. September 2015, 17:25

Hallo,

ich hänge mal wieder bei einem Problem fest und komme nicht weiter.
Ich möchte gerne Objekte aus einer json Ausgabe löschen.
Und zwar soll alles gelöscht werden bis auf die TypeId.
  • Inventory {
    TypeId: "Building"
    Item {
    ItemId: "House"
    Record {
    BoughtCount: 0
    EarnedCount: 1
    }
    }
    }
Im Normalfall erledige ich das hiermit, aber in diesem Fall bekomme ich einen Attribute Fehler.
Ich komm nicht drauf wo diesmal mein Denkfehler liegt.

Code: Alles auswählen

        idx2del = []
        for item in self.mState.Inventory:
            for idx in item.Item:
                idx2del.insert(0, idx)
            for idx in idx2del:
                del it.Item[idx]
Gruß
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@nathan6
Weshalb möchtest Du so umständlich alles um den Schlüssel 'TypeId' herum löschen anstatt einfach den Wert hinter 'TypeId' abzurufen?

Code: Alles auswählen

In [2]: inventory = {
'TypeId': "Building",
'Item': {
'ItemId': "House",
'Record': {
'BoughtCount': 0,
'EarnedCount': 1,
}
}
}

In [3]: inventory
Out[3]: 
{'Item': {'ItemId': 'House', 'Record': {'BoughtCount': 0, 'EarnedCount': 1}},
 'TypeId': 'Building'}

In [4]: inventory['TypeId']
Out[4]: 'Building'
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
nathan6
User
Beiträge: 17
Registriert: Montag 7. September 2015, 17:25

Ich weiß wie ich die Werte Abrufe. Der Grund ist einfach das bei möglichen 5000 Einträgen unübersichtlich und zu groß wird.
Wie gesagt die Werte abrufen ist kein Problem, aber sobald ich versuche Objekte zu löschen bekomm ich Fehlermeldungen.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@nathan6: wo Du einen Fehler machst, kann Dir hier niemand sagen, weil Dein Code absolut unverständlich ist. Erstmal unbekannt Objekte. self.mState.Inventory scheint eine Liste zu sein, aber was für einen Typ hat item? Was ist dann item.Item? Eine Liste mit Indizes? Von Deiner Beschreibung her sollte das eigentlich ein Wörterbuch sein? Was ist `it`?
Warum füllst Du die Liste von vorne und nicht wie üblich per append von hinten? Warum wird idx2del nur vor der äußersten Schleife initialisiert? Und wo wird zwischen TypeId und den restlichen Keys unterschieden?

Die Lösung hat ja mutetella schon angedeutet, einfach ein neues Wörterbuch mit dem gewünschten Key erzeugen:

Code: Alles auswählen

for item in self.mState.Inventory:
    item.Item = {'TypeID': item.Item['TypeID']}
BlackJack

@nathan6: Es ist halt wesentlich einfacher einen Wert abzufragen als alle anderen zu löschen. Daten aus Listen oder Wörterbüchern zu löschen ist eher ungewöhnlich. Normalerweise erstellt man einfach eine neue Datenstruktur ohne die unerwünschten Werte.
nathan6
User
Beiträge: 17
Registriert: Montag 7. September 2015, 17:25

Ha ich habs, ich wusste doch das mein Code funktioniert, ich musste nur einen Schlüssel tiefer gehen um die Übergeordneten zu löschen.
  • Inventory {
    TypeId: "DateBuilding"
    }
Trotzdem Danke an alle
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Weiß nicht… manchmal komm' ich mir irgendwie verkackeiert vor… :(
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
nathan6
User
Beiträge: 17
Registriert: Montag 7. September 2015, 17:25

mutetella hat geschrieben:Weiß nicht… manchmal komm' ich mir irgendwie verkackeiert vor… :(
Lol, brauchste nicht. Ich mach das nicht mit Absicht. Mein Gehirn braucht nur immer 10mal solang bis es Klick macht :roll:
Aber so lange kann ich nicht warten
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

mutetella hat geschrieben:Weiß nicht… manchmal komm' ich mir irgendwie verkackeiert vor… :(
Daran gewöhnt man sich nach einer Weile, wenn man regelmäßig Programmieranfängern hilft. Manche wollen oder können ganz einfach keine Lösungen verstehen, die nicht ihrem Denkmuster entsprechen. Wenn der OP mit seiner eigenen Lösung glücklich ist und ihm alles andere zu zeitaufwändig ist, dann müssen wir "Profis" eben damit leben... ;)
Antworten