使用字典存储默认值

时间:2018-09-17 11:40:15

标签: python dictionary

我正在研究一个机器学习程序,该程序具有很多元参数。该程序的预期用途是研究学习过程本身,因此,我希望我将在许多不同的时间训练模型,每次更改元参数的子集,并将其余参数保留为默认值。

我认为实现此目的的最佳方法是使用默认参数字典,该参数字典中的任何值都可以由用户覆盖。

DEFAULT_PARAMETERS={
    "parameter_1": 1,
    "parameter_2": 2,
    #...
}

def main(**kwargs):
    parameters = {}
    for key in DEFAULT_PARAMETERS:
        if key in kwargs:
            parameters[key] = kwargs[key]
        else:
            parameters[key] = DEFAULT_PARAMETERS[key]

但是,我从来没有见过人们使用这种方法,为什么没有呢?另外,是否有一种列表理解语法,可以让我在一行中实现上述循环?

2 个答案:

答案 0 :(得分:3)

对于python 3.5 +

merged = { **DEFAULT_PARAMETERS, **kwargs }

这可以解决问题。 **语法扩展了字典。 小心!订单很重要!

Related PEP

答案 1 :(得分:2)

  

但是,我从未见过有人使用这种方法

您是否了解其他人的代码?可能不是(提示:这是一种非常常见的模式,但实际上已实现)

  

有没有理由吗?

不,这只是显而易见的事情。

  

还有,列表理解语法是否可以让我在一行中实现上述循环?

对于python 3.5+,您可以尝试使用Vittorio Camisa的解决方案,但是该解决方案可以在Python 3.x和最新的Python 2.7.x版本中使用:

parameters = {k: kwargs.get(k, v) for k, v in DEFAULT_PARAMETERS.items()}