OmegaConf - 如何删除单个参数

问题描述 投票:0回答:2

我有一个看起来像这样的代码:

def generate_constraints(c):
    if c.name == 'multibodypendulum':
        con_fnc = MultiBodyPendulum(**c)

其中 c 是包含一堆参数的 OmegaConf 对象。现在我想将 c 中除名称之外的所有参数传递给 MultiBodyPendulum 类(该名称用于标识将其余参数发送到的类)。但是我不知道如何在没有一个参数的情况下制作 c 的副本。 有人对此有好的解决方案吗?

python fb-hydra omegaconf
2个回答
1
投票

您可以尝试使用

my_dict = c.__dict__
从实例中获取字典,然后使用
pop()

从字典中删除类

类似的东西:

my_dict = c.__dict__
old_name = my_dict.pop("name", None)
con_fnc = MultiBodyPendulum(**my_dict)

这样你可以添加除名称之外的每个参数,如果你想添加不同的名称,你可以将它添加到新实例创建中,如:

con_fnc = MultiBodyPendulum(name="New Name", **my_dict)

1
投票

我建议使用

DictConfig.copy
创建副本和
del
DictConfig
对象中删除属性/项目。

config: DictConfig = ...

config_copy = config.copy()
del config_copy.unwanted_parameter
pendulum = MultiBodyPendulum(**config_copy)
© www.soinside.com 2019 - 2024. All rights reserved.