Python如何比较嵌套字典并向基础字典补全缺失项
Python字典缺失项补全实现方案
核心需求:以language为基础字典,校验language_1中的所有条目,将基础字典中不存在的条目补充进去,不覆盖已有内容。
方案1:仅校验顶层键(匹配当前示例场景)
你的示例中只需要判断顶层语言键是否存在,缺失则整体追加对应语言的所有标签内容,直接遍历判断即可,逻辑最简单:
language_1 = {"kannada" : {"lbl01":"kannada_File","lbl02":"kannada_accounts","lbl03":"kannada_Inventory","lbl04":"kannada_manufacture"}, "english": {"lbl01": "File", "lbl02": "Accounts", "lbl03": "Inventory", "lbl04": "manufacture"}} language = {"id" : {"lbl01":"file" ,"lbl02":"accounts" ,"lbl03":"inventory" ,"lbl04":"manufacture"}, "english" : {"lbl01":"File" ,"lbl02":"Accounts" ,"lbl03":"Inventory" ,"lbl04":"manufacture"}, "tamil" : {"lbl01":"கோப்பு" ,"lbl02":"கணக்கியல்" ,"lbl03":"சரக்கியல்" ,"lbl04":"உற்ப்பத்தி"}, "hindi" : {"lbl01":"Hindi_File","lbl02":"Hindi_accounts","lbl03":"Hindi_Inventory","lbl04":"Hindi_manufacture"}} # 遍历待校验字典的顶层键 for lang_key, lang_content in language_1.items(): # 键不存在才追加,不改动已有内容 if lang_key not in language: language[lang_key] = lang_content
执行后language字典会新增kannada对应的整套标签内容,原本存在的english等键不会被修改,完全符合示例要求。
方案2:递归校验所有嵌套层级(通用场景)
如果后续业务有更复杂的需求,比如某个语言已经在基础字典中,但缺少部分lblxx子标签,也需要自动补全且不覆盖已有翻译,可以用递归合并的方式,适配任意层级的嵌套字典:
def fill_missing_keys(base: dict, reference: dict) -> None: """递归补全基础字典中所有缺失的键,已有键的值不会被覆盖""" for k, v in reference.items(): if k not in base: base[k] = v # 两边对应值都是字典时,递归校验内部键 elif isinstance(base[k], dict) and isinstance(v, dict): fill_missing_keys(base[k], v) # 调用方法补全 fill_missing_keys(language, language_1)
说明:该方法只会处理字典类型的嵌套值,如果你的数据里包含列表、元组等其他类型的嵌套结构,默认不会深入结构内部比对,可以根据实际业务需求调整判断逻辑。
内容的提问来源于stack exchange,提问作者tckraomuqnt
相关产品推荐
相关产品推荐

