2016-06-06 2 views
0

Ich versuche Operationen auf einem verschachtelten Wörterbuch (Daten aus einer YAML-Datei abgerufen) auszuführen:Verwenden Liste des Indizes eine verschachtelte Wörterbuch zu manipulieren

data = {'services': {'web': {'name': 'x'}}, 'networks': {'prod': 'value'}} 

Ich versuche, die oben mit Hilfe der Eingänge zu ändern wie:

{'services.web.name': 'new'} 

I umgewandelt, um die oben auf eine Liste von Indizes ['services', 'web', 'name']. Aber ich bin nicht in der Lage/nicht sicher, wie der unten Betrieb in einer Schleife auszuführen:

data['services']['web']['name'] = new 

So kann ich dict die Daten ändern kann. Es gibt noch andere Werte Ich plane, in dem obigen Wörterbuch zu ändern (es ist sehr umfangreich ein), so ich brauche eine Lösung, die in Fällen funktioniert, wo ich ändern muß, EG:

data['services2']['web2']['networks']['local']. 

Gibt es eine einfache Möglichkeit, dies zu tun ? Jede Hilfe wird geschätzt.

Antwort

0

Sie können die Schlüssel iterieren, während ein Referenz-Bewegungs:

data = {'networks': {'prod': 'value'}, 'services': {'web': {'name': 'x'}}} 
modification = {'services.web.name': 'new'} 

for key, value in modification.items(): 
    keyparts = key.split('.') 
    to_modify = data 
    for keypart in keyparts[:-1]: 
     to_modify = to_modify[keypart] 
    to_modify[keyparts[-1]] = value 

print(data) 

Giving:

{'networks': {'prod': 'value'}, 'services': {'web': {'name': 'new'}}} 
+0

ehrfürchtig. Ich konnte es mit einigen Modifikationen arbeiten lassen! Schätze die Hilfe. – user3786914

Verwandte Themen