数组实现词典映射本质是“索引→元素”的线性存储,适用于键为小范围连续非负整数的场景,如状态码、月份、星期等;字符串键需先哈希转整数,否则无法直接使用。
用数组实现词典映射,本质是把“键→值”的关系转为“索引→元素”的线性存储。它适合键为小范围连续整数的场景,比如状态码、等级编号、月份序号等,结构简单、访问极快,但不适用于字符串键或稀疏键。
适用前提:键必须是可控的整数
数组靠下标定位,所以只有当键能直接作为合法索引(非负整数且不越界)时,才能自然映射。例如:
- 学生成绩等级:0→'F',1→'D',2→'C',3→'B',4→'A'
- 星期几编号:0→'Sun',1→'Mon',…,6→'Sat'
- RGB通道索引:0→'R',1→'G',2→'B'
若原始键是字符串(如'dog'、'cat'),需先通过哈希或编码转换成整数,否则不能直接用数组承载。
基础实现:用列表模拟固定大小词典
Python 中最直接的方式是用 list 初始化一个固定长度的容器,每个位置存对应键的值:
# 假设键范围是 0~4,共5个等级 grade_map = ['F', 'D', 'C', 'B', 'A'] # 索引即键 <h1>查询键为 3 的值 → 'B'</h1><p>result = grade_map[3]</p><h1>修改键为 1 对应的值</h1><p>grade_map[1] = 'D+'
注意:访问前要确保索引在 0 ≤ key 范围内,否则抛出 IndexError。可加一层安全封装:
def safe_get(arr, key, default=None):
if 0 <= key < len(arr):
return arr[key]
return default
<p>print(safe_get(grade_map, 10, 'Unknown')) # 输出 'Unknown'实战解析:变量名映射到数值(如配置参数)
假设你有一组配置变量,希望用简短代号快速查出对应数值:
- 'speed' → 80
- 'volume' → 75
- 'timeout' → 300
- 'retries' → 3
若这些代号可编号(如按定义顺序),就能构建索引映射:
# 按固定顺序定义键名与值
keys = ['speed', 'volume', 'timeout', 'retries']
values = [80, 75, 300, 3]
<h1>构建反向查找表:名称 → 索引</h1><p>name_to_idx = {name: i for i, name in enumerate(keys)}</p><h1>查 'timeout' → 先得索引,再取值</h1><p>idx = name_to_idx.get('timeout')
val = values[idx] if idx is not None else None # val = 300这种方式把“字符串键”查值拆成两步:先查名到索引(用字典加速),再用索引查数组值。兼顾了可读性与数组访问效率。
进阶技巧:处理带偏移的整数键
有时键不是从 0 开始,比如年份 2020~2025,或设备 ID 1001~1005。此时可用偏移量对齐:
# 键范围:1001 ~ 1005 → 映射到索引 0 ~ 4 base = 1001 data = [23.5, 24.1, 22.9, 25.0, 23.8] # 对应 ID 1001 到 1005 的温度值 <p>def get_by_id(device_id): idx = device_id - base if 0 <= idx < len(data): return data[idx] return None</p><p>print(get_by_id(1003)) # → 22.9
关键点是统一管理 base 值和数组长度,避免硬编码导致维护困难。

















