2013-03-07 12 views
5

Dal python documentation Vedo che dict ha un metodo update(...), ma sembra che non ci siano eccezioni dove potrei non voler aggiornare il vecchio dizionario con un nuovo valore. Ad esempio, quando il valore è None.Aggiornare un dizionario con un altro dizionario, ma solo valori diversi da Nessuno

Questo è quello che attualmente faccio:

for key in new_dict.keys(): 
    new_value = new_dict.get(key) 
    if new_value: old_dict[key] = new_value 

c'è un modo migliore per aggiornare il vecchio dizionario con il nuovo dizionario.

+1

Il codice scarta anche 'false' e '0'. Puoi anche eseguire iterazioni usando 'per k, v in new_dict.items():' –

risposta

11

Si potrebbe usare qualcosa come:

old = {1: 'one', 2: 'two'} 
new = {1: 'newone', 2: None, 3: 'new'} 

old.update((k,v) for k,v in new.iteritems() if v is not None) 

# {1: 'newone', 2: 'two', 3: 'new'} 
1

Sulla Jon's answer ma utilizzando set intersection come suggerito here:

in Python 3:

old.update((k, new[k]) for k in old.keys() & new.keys()) 

in Python 2.7:

old.update((k, new[k]) for k in old.viewkeys() & new.viewkeys()) 

in Python 2.7 o 3 utilizzando il pacchetto future:

from future.utils import viewkeys 
old.update((k, new[k]) for k in viewkeys(old) & viewkeys(new)) 

O in Python 2 o 3 senza che il pacchetto future con la creazione di nuovi insiemi:

old.update((k, new[k]) for k in set(old.keys()) & set(new.keys())) 
Problemi correlati