You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 21:30:41