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