Probleme bei dict 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
DMD-OS
User
Beiträge: 165
Registriert: Freitag 28. Dezember 2018, 13:52

Ich versuche, ein Dictionary zu erstellen, in dem die einzelnen Einträge auch wiederum Dictionaries sind.
Dabei habe ich aber ziemliche Probleme, weshalb ich auf Hilfe hoffe.
Ich hoffe, das Problem ergibt sich aus dem Code:

Code: Alles auswählen

dict_list = [['Hallo', 'Wie gehts?', "a", "b", "c"], ['Sortierung im PFS', '1. Knoten', "d", "e", "f"], ['Sortierung im PFS', '2. Knoten', "g", "h", "i"]]

dictionary = {}
dict = {}

for dict_ele in dict_list:
    print(str(dict_ele[0]) + " --- " + str(dict_ele[1]) + " --- " + str(dict_ele[2:]))
    dict[dict_ele[1]] = dict_ele[2:]
    dictionary[dict_ele[0]] = dict[dict_ele[1]]
print('---')
print("Meine Ausgabe: " + str(dictionary))
print("Gewollt:  " + str("{'Hallo': {'Wie gehts': ['a', 'b', 'c']}, 'Sortierung im PFS': {'1. Knoten': ['d', 'e', 'f'], '2. Knoten': [['g', 'h', 'i']]}})"))
Ausgabe:

Code: Alles auswählen

Hallo --- Wie gehts? --- ['a', 'b', 'c']
Sortierung im PFS --- 1. Knoten --- ['d', 'e', 'f']
Sortierung im PFS --- 2. Knoten --- ['g', 'h', 'i']
---
Meine Ausgabe: {'Hallo': ['a', 'b', 'c'], 'Sortierung im PFS': ['g', 'h', 'i']}
Gewollt:  {'Hallo': {'Wie gehts': ['a', 'b', 'c']}, 'Sortierung im PFS': {'1. Knoten': ['d', 'e', 'f'], '2. Knoten': [['g', 'h', 'i']]}})
Wie kann man Dictionaries ineinanderschachteln?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@DMD-OS: `dict_list` ist keine Liste von Wörterbüchern, sondern eine Liste mit Listen, so solltest Du die Variable aber auch nicht nennen, der Name sollte den Inhalt beschreiben und nicht die Struktur. `dict` ist ein ganz schlechter Variablennamen, weil der den eingebauten Typ `dict` verdeckt.

Strings setzt man nicht mit + zusammen, sondern benutzt Stringformatierung.
Es macht wenig Sinn, erst ein Objekt in ein Wörterbuch zu schreiben, um es dann im nächsten Schritt wieder über das Wörterbuch auszulesen.
Wenn Du Verschachtelung willst, solltest Du auch die Wörterbücher verschachteln. Dazu brauchst Du aber auch in jeder Schachtel ein neues Wörterbuch.
Hier könnte Dir `collections.defaultdict` helfen.
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Code: Alles auswählen

In [57]: xs
Out[57]: 
[['Hallo', 'Wie gehts?', 'a', 'b', 'c'],
 ['Sortierung im PFS', '1. Knoten', 'd', 'e', 'f'],
 ['Sortierung im PFS', '2. Knoten', 'g', 'h', 'i']]

In [58]: r = defaultdict(dict)

In [59]: for a, b, *c in xs: r[a][b] = c

In [60]: r
Out[60]: 
defaultdict(dict,
            {'Hallo': {'Wie gehts?': ['a', 'b', 'c']},
             'Sortierung im PFS': {'1. Knoten': ['d', 'e', 'f'],
              '2. Knoten': ['g', 'h', 'i']}})
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten