使用另一个字典更新字典,但只能使用非None值

时间:2013-03-07 17:03:59

标签: python

从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

有没有更好的方法来使用新词典更新旧词典。

3 个答案:

答案 0 :(得分:12)

您可以使用以下内容:

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 :(得分: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())

在使用future包的python 2.7或3中:

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

或者在没有future包的python 2或3中创建新集:

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

答案 2 :(得分:0)

对于 python 3.x 遍历字典键值使用 for k,v in new.items()

IN: 
old = {1: 'one', 2: 'two'}
new = {1: 'new_one', 2: None, 3: 'new_three'}

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

Out:
old = {1: 'new_one', 2: 'two'}