Seite 1 von 1

Probleme bei dict in dict

Verfasst: Mittwoch 15. Mai 2019, 10:14
von DMD-OS
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?

Re: Probleme bei dict in dict

Verfasst: Mittwoch 15. Mai 2019, 10:28
von Sirius3
@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.

Re: Probleme bei dict in dict

Verfasst: Mittwoch 15. Mai 2019, 11:08
von __blackjack__

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']}})