2016-08-09 10 views
-3

Ich habe zwei Wörterbücher wie unten.Wie klicke ich Wörterbücher an?

d1 = { 
     "user1":{"key1":"val1","key2":"val2"}, 
     "user2":{"key3":"val3","key4":"val4"} 
    } 

d2 = { "admin":{ 
     "user1":{"key5":"val5","key6":"val6"}, 
     "user3":{"key7":"val7","key8":"val8"} 
       } 
    } 

Schluss Wörterbuch sollte wie folgt aussehen:

d3 = { 
       "user1":{"key1":"val1","key2":"val2","key5":"val5","key6":"val6"}, 
       "user2":{"key3":"val3","key4":"val4"}, 
       "user3":{"key7":"val7","key8":"val8"} 
       } 

Merging-Konzept gilt hier nicht. Könnten Sie mir bitte hier helfen?

Ich habe die Lösung von How to merge two Python dictionaries in a single expression? versucht. Unter Lösung ist anders als was ich brauchte.

{'admin': {'user3': {'key8': 'val8', 'key7': 'val7'}, 'user1': {'key6': 'val6', 
'key5': 'val5'}}, 'user2': {'key3': 'val3', 'key4': 'val4'}, 'user1': {'key2': ' 
val2', 'key1': 'val1'}} 
+0

Mögliche Duplikat [? Wie kann ich fusionieren zwei Python Wörterbücher in einem einzigen Ausdruck] (http://stackoverflow.com/questions/38987/how-can-i-merge-two-python- Wörterbücher in einem einzigen Ausdruck) – DeepSpace

+0

Und was passiert bei doppelten Schlüsseln? – DeepSpace

+0

@DeepSpace: Können Sie die letzten veröffentlichten Ausgabe, die ich ausprobiert habe und was genau ID benötigt. – User

Antwort

1

Sie können eine Kopie des ersten Wörterbuch nehmen, dann iterieren die andere Seite - einen Standard-leer-Wörterbuch erstellen, dann ist es mit dem Inhalt d2 aktualisieren, zB:

d3 = d1.copy() 
for k, v in d2['admin'].iteritems(): 
    d3.setdefault(k, {}).update(v) 

Geben Sie Ausgang von:

{'user1': {'key1': 'val1', 'key2': 'val2', 'key5': 'val5', 'key6': 'val6'}, 
'user2': {'key3': 'val3', 'key4': 'val4'}, 
'user3': {'key7': 'val7', 'key8': 'val8'}} 
+0

Danke für die Lösung. Was macht setdefault hier? – User

+1

@User Siehe https://docs.python.org/2/library/stdtypes.html#dict.setdefault –

Verwandte Themen