2013-03-07 108 views
5

从python documentation我看到dict有一个update(...)方法,但它似乎并不需要例外,我可能不想用新的旧的字典更新值。例如,当值为None时。更新字典与另一个字典,但只有非无值

这是我目前做的:

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

是否有更好的方法来更新使用新的字典旧字典。

+1

你的代码也丢弃'FALSE'和'0'。你也可以在new_dict.items()中使用'for k,v来迭代:' – 2013-03-07 17:13:20

回答

11

您可以使用类似:

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

大厦Jon's answer但使用set intersection的建议here

在Python 3:

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

在Python 2.7版:

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

在Python 2.7版或3使用future包:

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

或者在Python 2或3的无future包通过创建新集:

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