Listen und Dictionaries

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
lnix
User
Beiträge: 4
Registriert: Dienstag 6. September 2016, 09:11

Hallo Leute,

ich bin anfänger in Python und komme mit meinen Dictionaries nicht zurecht.

Ich möchte gerne folgende Datenstruktur:

Code: Alles auswählen

{
{Kontinent: "Name vom 1. Kontinent"
      {"Name vom 1 Land" : "Hauptstadt"
      "Name vom 2 Land" : "Hauptstadt""}
}
{Kontinent: "Name vom 2. Kontinent"
      {"Name vom 1 Land" : "Hauptstadt"
      "Name vom 2 Land" : "Hauptstadt""}
}
{Kontinent: "Name vom 3. Kontinent"
      {"Name vom 1 Land" : "Hauptstadt"
      "Name vom 2 Land" : "Hauptstadt""}
}
}
Die Daten liegen so vor:
Name vom Kontinent welt.kontinent.name
Name von Server welt.kontinent.land.name
Number vom Server welt.kontinent.land.hauptstadt

Hierfür habe ich folgenden Code:

Code: Alles auswählen

for kon in welt:
        out = {"kontinent" : kontinent.name}
        for lan in kontinent.land:
                out1 = {lan.name : lan.hauptstadt}
                out.update(out1)
        print out
Leider bekomme ich nicht das gewünsche ergebnis, sondern pro Kontinent ein Dictionarie und dann auch noch auf der gleichen Ebene von den Ländern.

Grüße
lnix
Zuletzt geändert von Anonymous am Dienstag 6. September 2016, 09:51, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Ein Dictionary in ein Dictionary zu packen ist kein Problem.

Du hast aber vergessen, dass das komplette innere Dictionary ein Wert ist. Aktuell legst du, wie du selber schon festgestellt hast, alles auf eine Ebene. Du musst das innere Dictionary aber als komplett neuen Eintrag hinzufügen und folglich auch einen Key dafür festlegen.
lnix
User
Beiträge: 4
Registriert: Dienstag 6. September 2016, 09:11

wie genau kann ich dies realisieren?
BlackJack

@lnix: Als erstes mach Dir mal klar wie die Datenstruktur tatsächlich aussehen soll, also nicht irgendwie hinschreiben wie das Ergebnis ungefähr aussehen soll, sondern so wie es *tatsächlich* aussehen soll, also syntaktisch korrektes Python. Wenn Du das mit Python ausführst, sollte vom Compiler kein `SyntaxError` kommen. Nur wenn man das Ziel kennt, kann man auch Code schreiben der das erzeugt.

Zerlege das Problem in kleinere Teilprobleme. Statt alles auf einmal lösen zu wollen, schreibe eine Funktion die die Welt in ein Wörterbuch wandelt und dabei davon ausgeht, dass es eine Funktion gibt, die alle Länder eines Kontinents in ein Wörterbuch wandelt. Damit hast Du zwei kleinere Teilprobleme die jeweils ganz leicht in einem einzigen Ausdruck gelöst werden können:

Code: Alles auswählen

def continent_as_dict(continent):
    return dict(
        (country.name, country.capital_name) for country in continent.countries
    )


def world_as_dict(world):
    return dict(
        (continent.name, continent_as_dict(continent)) for continent in world
    )
Antworten