假设字典应该有特定的键。如果缺少这些特定的键,是否有一种简单的方法可以将它们添加为默认值?
例如:
default_dict = {'name': '', 'height': 100, 'age': 20}
d = {'name': 'James', 'age': 65}
d.set_defaults(default_dict)
会将字典d更新为
{'name': 'James', 'age': 65, 'height': 100}
保留 d 的原始值,只添加缺少的键。
default_dict 不应在此过程中被破坏。
请您参考如下方法:
创建默认值的副本,并用d更新它;如果 d 中的所有键都是字符串,您可以通过一个 dict() 调用来实现:
d = dict(default_dict, **d)
对于具有非字符串键的字典,您将使用两个步骤:
d = default_dict.copy()
d.update({'name': 'James', 'age': 65})
或者您可以使用循环来更新 d,其中包含任何不存在的使用字典 View 的键;然而,这并没有那么快:
d = {'name': 'James', 'age': 65}
d.update((k, default_dict[v]) for k in default_dict.viewkeys() - d)
用 Python 3 中的 keys 替换 viewkeys。
如果您使用的是 Python 3.5 或更新版本,则可以使用类似的语法来创建新字典:
d = {**default_dict, 'name': 'James', 'age': 65}
首先应用 default_dict 的键值对,然后是您设置的任何新键;这些将覆盖旧的。参见 PEP 448 - Additional Unpacking Generalizations在 3.5 新增功能文档中。
任何创建新字典的方法都可以简单地通过包装在 dict.update() 调用中来更新现有字典。所以第一个可以就地更新 d :
d.update(dict(default_dict, **d))
