2017-02-22 3 views
0

Ich bin fest, herauszufinden, wie Sie das Folgende tun. Ich habe ein dict x = {}. Ich habe auch zwei Strings 'a/b/c/d' und 'e/f/g'. In jedem Fall möchte ich Werte zu dict x hinzufügen, z. B. x[a][b][c] = 'd' und x[e][f] = 'g'.Anhängen an eine X-Dimension ohne Angabe der Dimension

Gibt es eine Möglichkeit, Python zu sagen, wie tief ich "d" oder "g" setzen möchte, ohne einen vollständigen Pfad angeben zu müssen?

Meine aktuelle Lösung sieht sehr hässlich aus und ich suche nach einer besseren Möglichkeit, dies zu tun.

x = {'a': {'b': {'c': {}}}, 'e': {'f': {}}} 
s = 'a/b/c/d'.split('/') 
if len(s) == 4: 
    x[s[0]][s[1]][s[2]] = s[3] 
elif len(s) == 3: #x[e][f] case 
    x[s[0]][s[1]] = s[2] 
+0

Es gibt verschiedene Möglichkeiten, kann sich bei Ihrem Anwendungsfall abhängig. Wofür brauchst du das? – kazemakase

+0

Warum nicht nur ein Diktat mit {'abc': None, 'ef': None} als Schlüssel? .. –

+0

@kazemakase, ich muss eine vollständige Verzeichnisstruktur erstellen, die über Web-UI-Links zu diesen Verzeichnissen iteriert. – fieryvova

Antwort

2

Sie könnten eine for-Schleife verwenden:

keys = s.split('/') 
d = x 
for key in keys[:-2]: 
    d = d [key] 
d[keys[-2]] = keys[-1] 
+0

Danke, aber es ist nicht genau das, was ich will. Für s = ['a', 'b', 'c', 'd'] ist das Ergebnis {'c': 'd'}, aber ich möchte, dass es {a ': {' b ': {'c': 'd'}}} – fieryvova

+0

Vergiss meine vorherige Antwort. Es wirkt wie ein Zauber! Vielen Dank! – fieryvova

Verwandte Themen