从 python文档中我看到它dict
有一个update(...)
方法,但它似乎不会出现我可能不想用新值更新旧字典的例外情况。例如,当值为None
.
这是我目前所做的:
for key in new_dict.keys():
new_value = new_dict.get(key)
if new_value: old_dict[key] = new_value
有没有更好的方法来使用新字典更新旧字典。
你可以使用类似的东西:
old = {1: 'one', 2: 'two'}
new = {1: 'newone', 2: None, 3: 'new'}
old.update( (k,v) for k,v in new.items() if v is not None)
# {1: 'newone', 2: 'two', 3: 'new'}
更新:我想我在这里试图回答错误的问题(请参阅下面的评论),因为这显然不能回答所提出的问题。万一有什么有用的东西,无论如何我都会把它留在这里(除非有人明确表示最好删除它)。
以乔恩的回答为基础,但按照此处的建议使用设置交集:
在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()))
对于 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'}