为python词典提供默认值,同时保持对原始对象的引用

时间:2013-07-23 16:38:16

标签: python

我有以下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的返回值。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

您可以双向更新:

defaults.update(params)
params.update(defaults)

第一次更新确保保留params中最初的值,而第二次更新直接修改params。

或者,只需手动更新:

for k in defaults:
    params.setdefault(k, defaults[k])

然而,更好的选择可能是简单地返回一个新的dict,而不是直接修改原来的dict。