2016-08-11 10 views
0

Betrachten Sie das Szenario, in dem Liste enthält Schlüssel eines dictMehrwert dict Tasten Liste

x = {'a':{'b': 1}} 
lst = ['a','c'] 
value = {'d': 3} 

Mit den Tasten in der Liste lst ist es eine Möglichkeit, einen Eintrag in den dict hinzufügen x verwenden.

Erwartetes Ergebnis:

x = {'a': {'c': {'d': 3}, 'b': 1}} 
+2

was haben Sie ausprobiert? – Harsha

+0

Ein Ansatz könnte sein, mit 'x [lst [0]] [lst [1]]' darauf zuzugreifen, aber da die lst von beliebiger Größe sein kann, denke ich immer noch daran, wie ich dasselbe erreichen kann. – user3351750

Antwort

0

Verwenden Sie eine Schleife ein eine temporäre dictionary_variable:

tmp_dict = x 
for key in lst[:-1]: 
    tmp_dict = tmp_dict[key] 
tmp_dict[lst[-1]] = value 
print x 

Hinweis, dass die Schleife über alle Tasten mit Ausnahme des letzten, da müssen wir den letzten Schlüssel für die Zuweisungsoperation.

+0

Das funktioniert, aber warum erstellt 'tmp_dict = x' keine andere Kopie von x? – user3351750

+0

So behandelt Python Objekte. Es liefert nur einen Verweis auf das dict-Objekt. Schauen Sie sich dieses Beispiel an: 'a = [], b = a, b.append (1), print (a)' (mit Zeilenumbrüchen anstelle von ','). Wenn Sie etwas kopieren möchten, müssen Sie explizit sein und etwas wie 'copy.deepcopy' verwenden. – user38034

1

Philipps Antwort ist gut.

Aber hier ist mein Versuch, Ihnen die exakte Antwort zu geben, die Sie erwarteten.

x = {'a':{'b' : 1}} 
lst=['a','c'] 
value = {'d':3} 

x[lst[0]][lst[1]] = value 
print(x) 
>> {'a': {'c': {'d': 3}, 'b': 1}} 
+0

Die Antwort, die ich erwarte, ist die Verwendung der Schlüsselwerte aus der Liste, anstatt die Tasten – user3351750

+0

@ user3351750 hardcoding, habe ich den Code oben bearbeitet. Ich habe lst [0] und list [1] verwendet. antwortet das? – MattR

+0

lst kann jede Größe haben, damit dies nicht funktioniert – user3351750

Verwandte Themen