from typing import Any, Dict, Tuple


def 二维元组按列转字典(元组数据: Tuple[Tuple[Any, ...], ...], 键列索引: int, 值列索引: int) -> Dict[Any, Any]:
    """将二维元组中指定两列转换为字典。

    功能说明:
        - 这个函数用于将二维元组中指定两列转换为字典。
        - 它主要处理“元组里的每一项还是元组”的二维结构，适合表格、记录行、报表数据这类场景。
        - 常用于按列取值、按行统计、转置，或把二维数据整理成更容易继续使用的结果。

    Args:
        元组数据: 由多个子元组组成的二维元组。
        键列索引: 作为字典键的列索引，支持负索引。
        值列索引: 作为字典值的列索引，支持负索引。

    Returns:
        转换成功时返回字典；失败时返回空字典 ``{}``。
    """
    try:
        if not isinstance(元组数据, tuple):
            return {}
        if not isinstance(键列索引, int) or not isinstance(值列索引, int):
            return {}

        结果 = {}
        for 项 in 元组数据:
            if not isinstance(项, tuple):
                return {}
            键 = 项[键列索引]
            值 = 项[值列索引]
            结果[键] = 值
        return 结果
    except Exception:
        return {}


if __name__ == "__main__":
    print("===== 示例1：基础列转字典 =====")
    数据 = (("A001", "张三", 88), ("A002", "李四", 92))
    print("结果:", 二维元组按列转字典(数据, 0, 2))

    print("\n===== 示例2：使用姓名作为键 =====")
    数据 = (("A001", "张三", 88), ("A002", "李四", 92))
    print("结果:", 二维元组按列转字典(数据, 1, 2))

    print("\n===== 示例3：使用负索引 =====")
    数据 = (("A001", "张三", 88), ("A002", "李四", 92))
    print("结果:", 二维元组按列转字典(数据, 0, -1))

    print("\n===== 示例4：列索引越界 =====")
    数据 = (("A001", "张三"), ("A002", "李四"))
    print("结果:", 二维元组按列转字典(数据, 0, 5))

    print("\n===== 示例5：数据结构不合法 =====")
    数据 = (("A001", "张三", 88), "错误项")
    print("结果:", 二维元组按列转字典(数据, 0, 2))

    print("\n===== 示例6：应用场景-把商品编码映射到库存 =====")
    商品数据 = (
        ("SKU001", "鼠标", 150),
        ("SKU002", "键盘", 90),
        ("SKU003", "耳机", 60),
    )
    print("结果:", 二维元组按列转字典(商品数据, 0, 2))



