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: 60
Registriert: Freitag 28. Dezember 2018, 13:52

Mittwoch 15. Mai 2019, 10:14

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: 10360
Registriert: Sonntag 21. Oktober 2012, 17:20

Mittwoch 15. Mai 2019, 10:28

@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: 4041
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Mittwoch 15. Mai 2019, 11:08

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']}})
“Programmieren ist ein Hobby, bei dem es einen riesigen Baumarkt mit quasi jedem Bauteil und Werkzeug und fast immer kostenlos gibt. Ob man deswegen in der Lage ist einen Kölner Dom zu bauen ist eine andere Frage. Arbeit steckt auf jeden Fall drin ;).” — Greebo, forum.ubuntuusers.de
Antworten