从“默认字典”更新值而不删除其键[重复]

Posted

技术标签:

【中文标题】从“默认字典”更新值而不删除其键[重复]【英文标题】:Update values from a "default dictionary" without removing its keys [duplicate] 【发布时间】:2019-05-10 10:54:53 【问题描述】:

我有两个字典,第一个是第二个的默认值在不存在或未定义时应该回退到的值,有点像这样:

default_dict = 
    'lorem': 
        'foo': 'white',
        'bar': 'black',
    ,
    'ipsum': 
        'xyz': '',
        'abc': ,
        'qwe': 

    

第二个看起来像这样:

custom_dict = 
    'lorem': 
        'bar': 'blue',
    ,
    'ipsum': 
        'xyz': 'apple',
        'qwe':  'one': 'strawberry' 

    

我有什么方法可以从 default_dict 中“更新”custom_dict 中的值?

所需的结果如下所示:

custom_dict = 
    'lorem': 
        'foo': 'white',
        'bar': 'blue',
    ,
    'ipsum': 
        'xyz': 'apple',
        'abc': ,
        'qwe':  'one': 'strawberry' 

    

我尝试过default_dict.update(custom_dict),然后是custom_dict = default_dict,但正如您可以想象的那样,我只是让custom_dict 原封不动...所以default_dict 的键在更新时会被删除。

【问题讨论】:

***.com/a/3233356/367273 【参考方案1】:

如果您的字典结构始终如上,那么以下代码可以正常工作:

for item in default_dict:
    for value in default_dict[item].keys():
        if value not in custom_dict[item].keys():
            custom_dict[item].update(value: default_dict[item][value])

祝你好运

【讨论】:

【参考方案2】:

用途:

d=a:b for k,v in custom_dict.items() for a,b in v.items()
print(k:a:d.get(a,b) for a,b in v.items() for k,v in default_dict.items())

字典理解 + 嵌套字典理解会起作用。

输出:

'lorem': 'foo': 'white', 'bar': 'blue', 'ipsum': 'xyz': 'apple', 'abc': , 'qwe': 'one': 'strawberry'

【讨论】:

以上是关于从“默认字典”更新值而不删除其键[重复]的主要内容,如果未能解决你的问题,请参考以下文章

编辑单个 YAML 值而不更新 YAML 其余部分的格式(YAML CPP)[重复]

从 MYSQL 表中更新值而不重新加载页面?

打印按其键排序的字典项目[重复]

如何在循环中更新 html 标记的值而不覆盖前几轮

从 C++ 中的数组中删除重复项 [关闭]

如何在excel中找到多个最小值而不重复?