Python 办公自动化从入门到入土|09 数据容器之字典 前言列表、元组靠下标数字取值适合顺序排列的数据但现实办公场景经常遇到姓名‑年龄、学号‑分数、员工号‑薪资这种「键值对应」的数据此时就用字典 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 要求必须不可变字符串、数字、元组列表不能做 keykey 唯一重复写后面会覆盖前面value任意类型字符串、数字、列表、字典都可以字典无序Python3.7 保留插入顺序但不能用数字下标访问错误写法# d {[1,2]: 100} # list可变不能作为key报错 TypeError: unhashable type: list2. 获取字典的值方式 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 i2} 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