2017-04-12 1 views
0

Unten habe ich ein einfaches Programm. Ich beabsichtige, die beiden Wörterbücher zusammenzuführen. Aber ich möchte keine der Werte in Bezug auf Offset, Limit, Ergebnisse kopieren. Nur die Taste mit der Bezeichnung "Items" und die Liste darunter, die mehr Wörterbücher enthält.Dict enthält eine Liste mit mehr dicts - Aktualisierung

Mein Problem ist, dass ich die Liste unter Elemente ziehen und in einer Variablen speichern kann, die die anderen Schlüssel entfernt, aber wenn ich gehe, um es der anderen Liste hinzuzufügen, anstatt zu aktualisieren, ersetzt es die Werte.

Zum Beispiel habe ich zwei Wörterbücher:

my_dict: {'status': 'ok', 'result': {'items': [{'Test': 1000}, {'Test2': 2000}]}} 
my_dict2: {'status': 'ok', 'result': {'items': [{'Test3': 1000}, {'Test4': 2000}]}} 

Mein Ergebnis erwarte ich ist:

my_dict2: {'status': 'ok', 'result': {'items': [{'Test3': 1000}, {'Test4': 2000}, {'Test': 1000}, {'Test2': 2000}]}} 

aber ich bekomme:

my_dict2: {'status': 'ok', 'result': {'items': [{'Test': 1000}, {'Test2': 2000}]}} 

Code:

my_dict = { 
    "status": "ok", 
    "result": { 
     "offset": 0, 
     "limit": 1000, 
     "total": 839, 
     "items": [ 
      { 
} 
] 
} 
} 

my_dict2 = my_dict 

my_dict.update({'result': {'items': [{'Test': 1000},{'Test2': 2000}]}}) 
my_dict_values = my_dict['result']['items'] 

my_dict2.update({'result': {'items': [{'Test3': 1000},{'Test4': 2000}]}}) 
print "Before: %s" % (my_dict2) 
my_dict2.update({'result': {'items': my_dict_values}}) 
print "After: %s" % (my_dict2) 
+1

Sie aktualisieren 'my_dict2', wenn Sie wirklich nur aktualisieren möchten' my_dict2 [ 'Artikel'] '. – Paul

+0

@Patrick Haugh Danke für die Bearbeitung meines Beitrags. Ich habe vergessen, den Code-Schnipsel für die Spitze hinzuzufügen ;-) –

+0

@Paul Ja, es scheint genau das zu sein, was ich tat, die akzeptierende Antwort gibt mir die richtige Funktion zu verwenden. Danke Kumpel. :-) –

Antwort

1

Ihr Beispiel scheint normal zu sein, da die Methode dictionary update() die Werte überschreibt, wenn der angegebene Schlüssel im Wörterbuch vorhanden ist.

my_dict2 hat Schlüssel 'result', der einen Wert {'items': [{'Test3': 1000},{'Test4': 2000}]} hat.

Sie den Wert 'result' mit my_dict_values überschrieben, die {'items': [{'Test': 1000}, {'Test2': 2000}]}

ist um Ergebnisse zu erhalten erwartet, könnte möchtest du versuchen:

my_dict2['result']['items'].extend(my_dict_values) 
+0

ahh danke! Ich wusste, dass es nur etwas einfaches war, was ich falsch gemacht habe. Ich habe die Update-Funktion nur missverstanden. –

0

Sie überschreiben den Wert ‚Ergebnis‘ durch Update verwenden, vielleicht Änderung der Linie

my_dict2.update({'result': {'items': my_dict_values}}) 

zu

my_dict2['results']['items'] += my_dict_values 

wird es für Sie tun

Verwandte Themen