有没有方法通过另一个字典在Python字典中设置多个默认值?
假设我在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()