2014-11-25 12 views
5

Sto tentando di aggiornare i valori in un dizionario annidato, senza sovrascrivere le voci precedenti quando la chiave esiste già. Per esempio, ho un dizionario:Aggiornamento dei dizionari nidificati quando i dati hanno una chiave esistente

myDict = {} 
    myDict["myKey"] = { "nestedDictKey1" : aValue } 

dare,

print myDict 
>> { "myKey" : { "nestedDictKey1" : aValue }} 

Ora, voglio aggiungere un'altra voce, sotto "myKey"

myDict["myKey"] = { "nestedDictKey2" : anotherValue }} 

Ciò restituirà:

print myDict 
>> { "myKey" : { "nestedDictKey2" : anotherValue }} 

Ma voglio:

print myDict 
>> { "myKey" : { "nestedDictKey1" : aValue , 
       "nestedDictKey2" : anotherValue }} 

C'è un modo per aggiornare o aggiungere "myKey" con nuovi valori, senza sovrascrivere quelli precedenti?

risposta

5

provare qualcosa di simile:

try: 
    myDict["myKey"]["nestedDictKey2"] = anotherValue 
except KeyError: 
    myDict["myKey"] = {"nestedDictKey2": anotherValue} 

Quel modello aggiungerà la chiave al dizionario nidificato esistente o cre mangiato un nuovo dizionario annidato, se non esiste.

0
myDict["myKey"]["nestedDictKey2"] = anotherValue 

myDict["myKey"] restituisce il dizionario nidificato a cui possiamo aggiungere un altro tasto come facciamo noi per qualsiasi dizionario :)

Esempio:

>>> d = {'myKey' : {'k1' : 'v1'}} 
>>> d['myKey']['k2'] = 'v2' 
>>> d 
{'myKey': {'k2': 'v2', 'k1': 'v1'}} 
5

Per questo è possibile utilizzare collections.defaultdict e impostare le coppie chiave-valore all'interno del dizionario nidificato.

from collections import defaultdict 
my_dict = defaultdict(dict) 
my_dict['myKey']['nestedDictKey1'] = a_value 
my_dict['myKey']['nestedDictKey2'] = another_value 

In alternativa, è possibile anche scrivere quelle ultime 2 righe come

my_dict['myKey'].update({"nestedDictKey1" : a_value }) 
my_dict['myKey'].update({"nestedDictKey2" : another_value }) 
Problemi correlati