如何使用另一个字典中给出的默认键:值对更新 python 字典

Mig*_*uel 1 python dictionary

假设希望字典存在某些键。如果缺少默认值,是否有一种简单的方法可以添加这些具有默认值的特定键?

例如:

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不该在这个过程中被破坏。

Mar*_*ers 5

创建默认值的副本,并使用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 中替换viewkeyskeys

如果您使用的是 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)

  • 在 3.5 上,这也可以作为 `{**default_dict, **d}` 完成,对字符串键没有限制。 (2认同)