有没有方法通过另一个字典在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()