2013-03-07 6 views
5

Aus dem Python documentation Ich sehe, dass dict hat eine update(...) Methode, aber es scheint keine Ausnahmen, wo ich nicht wollen, das alte Wörterbuch mit einem neuen zu aktualisieren Wert. Zum Beispiel, wenn der Wert None ist.Aktualisieren Sie ein Wörterbuch mit einem anderen Wörterbuch, aber nur keine Werte

Dies ist, was ich im Moment tun:

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

Gibt es einen besseren Weg, um das alte Wörterbuch mit dem neuen Wörterbuch zu aktualisieren.

+1

auch Ihr Code verwirft 'false' und "0". Sie können auch mit 'for k, v in new_dict.items():' iterieren –

Antwort

11

könnten Sie so etwas wie verwenden:

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

Aufbauend auf Jon's answer aber mit set intersection als here vorgeschlagen:

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 oder 3 unter Verwendung des future Paket:

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

Oder in Python 2 oder 3 durch, ohne das future Paket durch neue Sets zu erstellen:

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