from typing import Any, Dict, Iterable

def 只保留键(
    数据: Dict[str, Any],
    保留键列表: Iterable[Any]
) -> Dict[str, Any]:
    """根据给定的键列表，仅保留字典中对应的键值对。

    功能说明:
        - 这个函数用于根据给定的键列表，仅保留字典中对应的键值对。
        - 它把字典里的常见操作单独封装好了，调用时不用自己反复写判断逻辑。
        - 当输入不符合要求时，函数会返回空字典或约定结果，避免程序因为异常中断。

    Args:
        数据 (dict): 原始字典对象。
        保留键列表 (Iterable): 需要保留的键集合。

    Returns:
        dict:
        - 成功：仅包含指定键的新字典；
        - 失败：空字典 {}。"""
    try:
        if not isinstance(数据, dict):
            return {}

        if not 保留键列表:
            return {}

        目标键集合 = {str(键) for 键 in 保留键列表}

        return {
            str(键): 值
            for 键, 值 in 数据.items()
            if str(键) in 目标键集合
        }
    except Exception:
        return {}


if __name__ == "__main__":
    print("===== 示例1：基础用法 =====")
    数据 = {"名称": "zfx", "年龄": 18, "城市": "上海"}
    保留键列表 = ["名称", "城市"]
    print("结果:", 只保留键(数据, 保留键列表))
    print("数据:", 数据)

    print("\n===== 示例2：常见变体 =====")
    数据 = {"name": "zfx", "phone": None, "items": [1, 2]}
    保留键列表 = ("name", "phone")
    print("结果:", 只保留键(数据, 保留键列表))
    print("数据:", 数据)

    print("\n===== 示例3：边界情况 =====")
    数据 = {}
    保留键列表 = []
    print("结果:", 只保留键(数据, 保留键列表))
    print("数据:", 数据)

    print("\n===== 示例4：异常情况 =====")
    数据 = []
    保留键列表 = "名称"
    print("结果:", 只保留键(数据, 保留键列表))
    print("数据:", 数据)

    print("\n===== 示例5：特殊值情况 =====")
    数据 = {"名称": "", "备注": None, "标签": []}
    保留键列表 = ["备注", "标签"]
    print("结果:", 只保留键(数据, 保留键列表))
    print("数据:", 数据)

    print("\n===== 示例6：应用场景-整理业务字典 =====")
    数据 = {"订单号": "A001", "状态": "待发货", "数量": 3}
    保留键列表 = ["订单号", "状态", "金额"]
    print("结果:", 只保留键(数据, 保留键列表))
    print("数据:", 数据)
