Elemente in Dict

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
MichaelM
User
Beiträge: 13
Registriert: Dienstag 15. Dezember 2020, 08:37

Hallo zusammen,
ich habe eine Frage zu Dict und bin auf meiner Suche leider nicht fündig geworden.
Ich möchte eine "Datenbank erstellen" und habe mich für Json als Dateiformat entschieden.
Exemplarisch hier Zwei Datensets, die in das verwendete Dict eingefügt werden sollen.
Hier auch schon die Frage, wie bekomme ich beide rein? Bisher wird immer ein Satz überschrieben.
Wie bekomme ich beide "Personen" in das Array Person rein?

Code: Alles auswählen

z1={'First':'John','Name':'Doe','Phone':'+490800666666','Cars':[{'Audi',VW'}]}
z2={'First':'MRS','Name':'John','Phone':'+4999888','Cars':[{'Skoda','Seat}]}

test=dict({'Person':[]})
test['Person']=z2
test['Person']=z1
test['Person'].update(z2)

print(type(test))

test
Zum Schluß soll dann test in einen Json Dump umgewandelt werden, ich denke der Part ist einfach, wenn erstmal alle Daten vorhanden sind.

Vielen Dank vorab!
Sirius3
User
Beiträge: 18227
Registriert: Sonntag 21. Oktober 2012, 17:20

Schlüssel müssen eindeutig sein. Du initialisierst "Person" mit einer leeren Liste. Suchst du also nur nach append?
Es ist unsinnig, ein gerade erzeugtes Wörterbuch nochmal per dict umzuwandeln. Sets können nicht in json gespeichert werden. Was soll überhaupt die Liste Cars, die exakt ein Set enthält?
MichaelM
User
Beiträge: 13
Registriert: Dienstag 15. Dezember 2020, 08:37

Das es nicht geht ist der Grund warum ich hier frage ;-).
Die Daten sind natürlich nur Beispiele.
Wie komme ich denn zu einem funktionierenden Json array, wo ich mehrere Sätze, also in meinem Beispiel Personen einfügen kann?
Ziel ist es am Ende eine Funktion zu haben, die entweder Datensätze einfügt oder ein Update macht.

Danke
MichaelM
User
Beiträge: 13
Registriert: Dienstag 15. Dezember 2020, 08:37

So, ich habe eine Lösung gefunden, nur damit das Thema nicht offen bleibt. Ein Problem waren die geschweiften Klammern bei den Autos.

Code: Alles auswählen

import json
z1={'First':'John','Name':'Doe','Phone':'+490800666666','Cars':['Audi','VW','SKODA']}
z2={'First':'MRS','Name':'John','Phone':'+4999888','Cars':['Zitrone','Fiat','Panda']}

test={}
test['Person']=[]
test['Person'].append(z1)
test['Person'].append(z2)

json_obj=json.dumps(test,indent=2)

#print(type(test))
print(json_obj)

Benutzeravatar
__blackjack__
User
Beiträge: 13937
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@MichaelM: Was da jetzt nich falsch ist ist der Schlüssel "Person" (einzahl) für eine Liste mit Personen (mehrzahl). Was auch gar nicht geht sind die Namen `z1` und `z2`. Man verwendet weder kryptische Abkürzungen (oder ganz sinnfreie Buchstaben) noch nummeriert man Namen. Und man würde `test` nicht so umständlich aufbauen sondern einfach direkt hinschreiben.

Code: Alles auswählen

    persons = {
        "Persons": [
            {
                "First name": "John",
                "Name": "Doe",
                "Phone": "+490800666666",
                "Cars": ["Audi", "VW", "SKODA"],
            },
            {
                "First name": "MRS",
                "Name": "John",
                "Phone": "+4999888",
                "Cars": ["Zitrone", "Fiat", "Panda"],
            },
        ]
    }
    print(json.dumps(persons, indent=2))
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Antworten