我有以下python字典:
box = {
'name': 'Test',
'length': 10,
'width': 20
}
我需要在将此对象传递给修改它的函数时保留对该对象的引用。
该函数将提供缺少的默认信息(在此示例中为height
):
def update_box(params):
defaults = {
'name': 'Default',
'length': 5,
'width': 5,
'height': 5
}
defaults.update(params)
params = defaults
return params
现在我需要从函数外部访问box
的属性。例如:
box = {
'name': 'Test',
'length': 10,
'width': 20
}
update_box(box)
print box['name'] # should output 'Test'
print box['height'] # should output 5
当然,这不起作用,因为params = default
中的update_box
行
函数会将params
重新分配给defaults
,但update_box
之外没有引用。
如果我删除该行,则不会修改box
。
我想要做的是使用dict update()
方法的某种反转
允许我使用默认值为对象“填充空白”,同时仍保留对原始对象的引用。
这样做的最佳方式是什么?
此外,此示例已简化,因此我不能只使用update_box
的返回值。谢谢你的帮助!
答案 0 :(得分:1)
您可以双向更新:
defaults.update(params)
params.update(defaults)
第一次更新确保保留params中最初的值,而第二次更新直接修改params。
或者,只需手动更新:
for k in defaults:
params.setdefault(k, defaults[k])
然而,更好的选择可能是简单地返回一个新的dict,而不是直接修改原来的dict。