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

2024-05-08 20:17:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个字典,第一个字典是第二个字典的默认值,如果它们不存在或没有定义,那么它们应该返回到什么,它有点像这样:

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

    }
}

第二个是这样的:

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

    }
}

有什么方法可以用custom_dict的值从default_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的键在更新时会被删除。你知道吗


Tags: defaultapple字典foocustombarblueone
2条回答

如果词典的结构始终与上述相同,则以下代码可以正常工作:

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]})

祝你好运

用途:

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'}}}

相关问题 更多 >