Seite 1 von 1

Listen und Dictionaries

Verfasst: Dienstag 6. September 2016, 09:31
von lnix
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

Re: Listen und Dictionaries

Verfasst: Dienstag 6. September 2016, 09:43
von /me
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.

Re: Listen und Dictionaries

Verfasst: Dienstag 6. September 2016, 10:08
von lnix
wie genau kann ich dies realisieren?

Re: Listen und Dictionaries

Verfasst: Dienstag 6. September 2016, 10:14
von 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
    )