从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
有没有更好的方法来使用新词典更新旧词典。
答案 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'}