在Python中,如何从多个具有优先级的字典中组合一个字典

在Python中,如何从多个具有优先级的字典中组合一个字典,python,json,dictionary,overriding,Python,Json,Dictionary,Overriding,是的,这个标题令人困惑,但请让我描述一下: 我从一个JSON文件中读取设置,使用不同的配置文件,用户选择使用哪个配置文件。因此,例如,如果用户在Profile2中启动程序,Profile2配置文件中未指定的选项将从全局中获取,如果它们不在全局中,则从标准中获取。因此,从侧面开始意味着: option=“value”(来自全局) _将被_覆盖=6(从配置文件) 在此处设置为仅为的值=False(默认设置) 仅设置在默认设置中指定的 从Profile2开始意味着 option=“value”(

是的,这个标题令人困惑,但请让我描述一下:

我从一个JSON文件中读取设置,使用不同的配置文件,用户选择使用哪个配置文件。因此,例如,如果用户在Profile2中启动程序,Profile2配置文件中未指定的选项将从全局中获取,如果它们不在全局中,则从标准中获取。因此,从侧面开始意味着:

  • option=“value”(来自全局)
  • _将被_覆盖=6(从配置文件)
  • 在此处设置为仅为的值=False(默认设置)
  • 仅设置在默认设置中指定的
从Profile2开始意味着

  • option=“value”(来自全局)
  • _将被_覆盖=5(来自全局)
  • 将_设置为仅_这里的_=True(来自Profile2)
  • 仅设置在默认设置中指定的

我希望你能理解我想要实现的目标,并感谢你提供的所有答案。对不起,我的英语不好

字典的顺序决定了哪些值将被覆盖,因此如果我现在理解了您的意思,可能的解决方案如下所示:

setts = {
    "Global": {
        "option":"value",
        "will_be_overriden":5
    },
    "Profile1": {
        "will_be_overriden":6
    },
    "Profile2": {
        "setting_that_only_is_here":True
    }
}


prof = 'Profile2'


new_setts = {**setts['Global'], **setts[prof]}

print(new_setts)

您可以合并/更新字典。在python 3.9中:settings=defaultsettings | globalsettings | profilesettings,有关其他选项,请参见:


这个答案不是Wups写的,而是作为一个注释,因此为了能够标记为解决方案,我在这里复制了它

您可以合并/更新字典。在python 3.9中:
settings=defaultsettings | globalsettings | profilesettings
,有关其他选项,请参阅:
setts = {
    "Global": {
        "option":"value",
        "will_be_overriden":5
    },
    "Profile1": {
        "will_be_overriden":6
    },
    "Profile2": {
        "setting_that_only_is_here":True
    }
}


prof = 'Profile2'


new_setts = {**setts['Global'], **setts[prof]}

print(new_setts)