2016-07-20 9 views
2

Ich habe ein verschachteltes Wörterbuch {1: {2: {3: None}}} und ein Wörterbuch, das Schlüssel des verschachtelten Wörterbuchs auf eine Reihe von Werten wie {1: x, 2: y, 3: z} abbildet. Ich möchte das verschachtelte Wörterbuch in dieses Formular {x: {y: {z: None}}} umwandeln. Ich habe ein paar rekursive Funktionen ausprobiert, aber ich laufe weiter im Kreis und verwirre mich. Was ist der beste Weg, dies zu erreichen?Python: Schlüssel in einem verschachtelten Wörterbuch ersetzen

Edit: Ich habe vergessen zu erwähnen, dass das Niveau der Verschachtelung beliebig ist. Das obige ist ein einfaches Beispiel.

+1

tun Sie vorhandenen Code? –

Antwort

1

Sie müssen durch das Wörterbuch rekursieren, während Sie ein neues mit neuen Schlüsseln erstellen. Beachten Sie, dass wenn Sie dort eine Liste oder ein Tupel haben, in dem sich andere Wörterbücher befinden, diese nicht verarbeitet werden - Sie müssten dafür etwas Code hinzufügen. Sie können dies tun, ohne ein neues Wörterbuch zu erstellen, aber ich denke, dass dieser Weg einfacher ist.

od = { 1: { 2: { 3: None }}} 
kd = { 1: 'x', 2: 'y', 3: 'z' } 

def replace_keys(old_dict, key_dict): 
    new_dict = { } 
    for key in old_dict.keys(): 
     new_key = key_dict.get(key, key) 
     if isinstance(old_dict[key], dict): 
      new_dict[new_key] = replace_keys(old_dict[key], key_dict) 
     else: 
      new_dict[new_key] = old_dict[key] 
    return new_dict 

nd = replace_keys(od, kd) 
print nd 

Ausgänge:

{'x': {'y': {'z': None}}}