有没有方法通过另一个字典在Python字典中设置多个默认值?

10 投票
6 回答
7668 浏览
提问于 2025-04-15 11:31

假设我在Python中有两个字典:

mydict = { 'a': 0 }

defaults = {
    'a': 5,
    'b': 10,
    'c': 15
}

我想用defaults中的默认值来扩展mydict,这样'a'保持不变,而'b'和'c'会被填充。我知道有dict.setdefault()dict.update()这两个方法,但它们各自只能完成我想要的一部分——使用dict.setdefault()时,我必须遍历defaults中的每个变量;而使用dict.update()时,defaults会覆盖mydict中已经存在的值。

有没有什么Python内置的功能可以做到这一点?如果没有,是否有更Pythonic的方式来写一个循环,重复调用dict.setdefault(),而不是像这样:

for key in defaults.keys():
    mydict.setdefault(key, defaults[key])

背景:我正在用Python编写一些数据,以控制如何解析一个XML树。每个节点都有一个字典(即,如何处理每个节点),我希望我写的数据尽量简洁,但又能用默认值填充。示例代码只是一个例子……实际代码中,默认字典里有更多的键值对。

(我知道这个问题其实很小,但它一直困扰着我,所以我想知道有没有我不知道的更好的方法。)

6 个回答

6

如果你不介意在这个过程中创建一个新的字典,这个方法就可以解决问题:

newdict = dict(defaults)
newdict.update(mydict)

现在,newdict 里包含了你需要的内容。

8

从Python 3.9开始,你可以这样做:

mydict = defaults | mydict

我发现这个解决方案在我的使用场景中是最优雅的。

12

你能不能让mydict成为default的一个副本?这样一来,mydict一开始就会有所有正确的值。

mydict = default.copy()

撰写回答