0

我有以下 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_boxparamsdefaultsupdate_boxbox

我想做的是有某种与 dictupdate()方法相反的方法,它允许我用默认值为对象“填充空白”,同时仍然保持对原始对象的引用。做这个的最好方式是什么?

另外,这个例子被简化了,所以我不能只使用update_box. 谢谢你的帮助!

4

1 回答 1

1

您可以双向更新:

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

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

或者,只需手动进行更新:

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

但是,更好的选择可能是简单地返回一个新的字典,而不是直接修改原始字典。

于 2013-07-23T16:45:02.937 回答