from typing import Any, Dict

def 获取差异(
    旧字典: Dict[str, Any],
    新字典: Dict[str, Any]
) -> Dict[str, Dict[str, Any]]:
    """比较两个字典，返回新增、删除、变化三类差异信息。

    功能说明:
        - 这个函数用于比较两个字典，返回新增、删除、变化三类差异信息。
        - 它把字典里的常见操作单独封装好了，调用时不用自己反复写判断逻辑。
        - 当输入不符合要求时，函数会返回空字典或约定结果，避免程序因为异常中断。

    Args:
        旧字典 (dict): 作为对比基准的旧字典。
        新字典 (dict): 作为目标状态的新字典。

    Returns:
        dict[str, dict[str, Any]]:
        - 新增：仅存在于新字典中的键值对；
        - 删除：仅存在于旧字典中的键值对；
        - 变化：值发生变化的键，格式为 {"旧值": xxx, "新值": xxx}。"""
    try:
        空结果: Dict[str, Dict[str, Any]] = {
            "新增": {},
            "删除": {},
            "变化": {},
        }

        if not isinstance(旧字典, dict):
            return 空结果

        if not isinstance(新字典, dict):
            return 空结果

        结果 = {
            "新增": {},
            "删除": {},
            "变化": {},
        }

        旧键集合 = {str(键) for 键 in 旧字典.keys()}
        新键集合 = {str(键) for 键 in 新字典.keys()}

        旧值映射 = {str(键): 值 for 键, 值 in 旧字典.items()}
        新值映射 = {str(键): 值 for 键, 值 in 新字典.items()}

        for 键 in 新键集合 - 旧键集合:
            结果["新增"][键] = 新值映射[键]

        for 键 in 旧键集合 - 新键集合:
            结果["删除"][键] = 旧值映射[键]

        for 键 in 旧键集合 & 新键集合:
            if 旧值映射[键] != 新值映射[键]:
                结果["变化"][键] = {
                    "旧值": 旧值映射[键],
                    "新值": 新值映射[键],
                }

        return 结果
    except Exception:
        return {
            "新增": {},
            "删除": {},
            "变化": {},
        }


if __name__ == "__main__":
    print("===== 示例1：基础用法 =====")
    旧字典 = {"a": 1, "b": 2, "c": 3}
    新字典 = {"b": 2, "c": 4, "d": 5}
    print("结果:", 获取差异(旧字典, 新字典))
    print("旧字典:", 旧字典)
    print("新字典:", 新字典)

    print("\n===== 示例2：常见变体 =====")
    旧字典 = {"名称": "zfx", "城市": "上海"}
    新字典 = {"城市": "上海", "名称": "zfx"}
    print("结果:", 获取差异(旧字典, 新字典))
    print("旧字典:", 旧字典)
    print("新字典:", 新字典)

    print("\n===== 示例3：边界情况 =====")
    旧字典 = {}
    新字典 = {}
    print("结果:", 获取差异(旧字典, 新字典))
    print("旧字典:", 旧字典)
    print("新字典:", 新字典)

    print("\n===== 示例4：异常情况 =====")
    旧字典 = []
    新字典 = []
    print("结果:", 获取差异(旧字典, 新字典))
    print("旧字典:", 旧字典)
    print("新字典:", 新字典)

    print("\n===== 示例5：特殊值情况 =====")
    旧字典 = {"配置": {"端口": 3306}, "debug": False}
    新字典 = {"配置": {"端口": 3306}, "debug": False}
    print("结果:", 获取差异(旧字典, 新字典))
    print("旧字典:", 旧字典)
    print("新字典:", 新字典)

    print("\n===== 示例6：应用场景-整理业务字典 =====")
    旧字典 = {"订单号": "A001", "状态": "待支付", "金额": 99}
    新字典 = {"状态": "待支付"}
    print("结果:", 获取差异(旧字典, 新字典))
    print("旧字典:", 旧字典)
    print("新字典:", 新字典)
