前言
列表、元组靠下标数字取值,适合顺序排列的数据;但现实办公场景经常遇到:姓名‑年龄、学号‑分数、员工号‑薪资这种「键值对应」的数据,此时就用字典 dict。
字典属于可变容器,key(键)找 value(值),查询速度快,大量用于 Excel 读取结果、JSON 接口数据、配置信息。
1. 字典基础语法
# 字面量创建字典 student = { "name": "张三", "age": 20, "major": "人工智能" } print(type(student)) print(student)输出:
<class 'dict'> {'name': '张三', 'age': 20, 'major': '人工智能'}- 格式:{key1:value1, key2:value2,...}
- key 要求:必须不可变(字符串、数字、元组),列表不能做 key;key 唯一,重复写后面会覆盖前面
- value:任意类型,字符串、数字、列表、字典都可以
- 字典无序(Python3.7 + 保留插入顺序,但不能用数字下标访问)
错误写法
# d = {[1,2]: 100} # list可变,不能作为key,报错 TypeError: unhashable type: 'list'2. 获取字典的值
方式 1:[key]取值,key 不存在直接报错
student = {"name":"张三","age":20} print(student["name"]) # print(student["score"]) # key不存在,KeyError输出:
张三方式 2:.get()推荐办公自动化使用,不会报错
print(student.get("name")) print(student.get("score", 0)) # key不存在返回默认值0,不会抛异常输出:
张三 0办公读 Excel、解析接口,优先用.get(),防止某一行缺少字段程序直接崩掉。
3. 新增 / 修改元素
字典 key 存在就是修改;key 不存在就是新增
student = {"name":"张三","age":20} student["age"] = 21 # key存在,修改 student["score"] = 88 # key不存在,新增键值对 print(student)输出:
{'name': '张三', 'age': 21, 'score': 88}4. 删除字典元素
student = {"name":"张三","age":20,"score":88} #pop 指定key删除,返回被删除的值 val = student.pop("score") print("pop删除的值:", val) print("pop之后字典:", student) #del 删除指定键值对 del student["age"] print("del之后字典:", student) #clear清空全部 student.clear() print("clear清空后:", student)输出:
pop删除的值: 88 pop之后字典: {'name': '张三', 'age': 20} del之后字典: {'name': '张三'} clear清空后: {}5. 字典常用内置方法
info = {"name":"李四","age":22,"city":"合肥"} #获取全部键 print(info.keys()) #获取全部值 print(info.values()) #获取全部键值对,遍历用 print(info.items())输出:
dict_keys(['name', 'age', 'city']) dict_values(['李四', 22, '合肥']) dict_items([('name', '李四'), ('age', 22), ('city', '合肥')])遍历字典(办公写脚本最高频)
info = {"name":"李四","age":22,"city":"合肥"} #遍历key print("---遍历key方式---") for k in info.keys(): print(k, info[k]) #直接遍历键值对 print("---遍历items方式---") for k, v in info.items(): print(f"键:{k},值:{v}")输出:
---遍历key方式--- name 李四 age 22 city 合肥 ---遍历items方式--- 键:name,值:李四 键:age,值:22 键:city,值:合肥6. 字典嵌套(处理 Excel 复杂表格、JSON)
表格一行数据经常封装成嵌套字典,办公自动化非常常见
staff = { "emp001": {"name":"小明","salary":6000}, "emp002": {"name":"小红","salary":7000} } #取值 print(staff["emp001"]["salary"]) print(staff["emp002"]["name"])输出:
6000 小红7. 字典推导式(快速生成字典)
# 简单示例:数字:平方 d = {i:i**2 for i in range(1,6)} print(d) #过滤版本 d2 = {i:i**2 for i in range(1,6) if i>2} print(d2)输出:
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25} {3: 9, 4: 16, 5: 25}8. 办公实战小案例:模拟 Excel 读取一行表格
从表格读取一行,封装字典,方便按列名字取值,不用记列索引号
# 表头 headers = ["姓名","年龄","工资"] # 表格一行数据 row_data = ["老王",35,9500] #打包成字典 row_dict = {headers[i]:row_data[i] for i in range(len(headers))} print(row_dict.get("姓名")) print(row_dict.get("工资")) print(row_dict)输出:
老王 9500 {'姓名': '老王', '年龄': 35, '工资': 9500}9. 字典与列表对比总结
容器 | 查找方式 | 是否可变 | 场景 |
list 列表 | 数字下标 | 可变 | 有序一组数据 |
tuple 元组 | 数字下标 | 不可变 | 固定不变序列 |
dict 字典 | key 键查询 | 可变 | 键‑值映射,表格、JSON |