Python 办公自动化从入门到入土|09 数据容器之字典

前言

列表、元组靠下标数字 取值,适合顺序排列的数据;但现实办公场景经常遇到:姓名‑年龄、学号‑分数、员工号‑薪资这种「键值对应」的数据,此时就用字典 dict 。

字典属于可变容器,key(键)找 value(值),查询速度快,大量用于 Excel 读取结果、JSON 接口数据、配置信息。

1. 字典基础语法

python 复制代码
# 字面量创建字典
student = {
    "name": "张三",
    "age": 20,
    "major": "人工智能"
}
print(type(student))
print(student)

输出:

plaintext 复制代码
<class 'dict'>
{'name': '张三', 'age': 20, 'major': '人工智能'}
  • 格式:{key1:value1, key2:value2,...}
  • key 要求:必须不可变(字符串、数字、元组),列表不能做 key;key 唯一,重复写后面会覆盖前面
  • value:任意类型,字符串、数字、列表、字典都可以
  • 字典无序(Python3.7 + 保留插入顺序,但不能用数字下标访问)

错误写法

python 复制代码
# d = {[1,2]: 100} # list可变,不能作为key,报错 TypeError: unhashable type: 'list'

2. 获取字典的值

方式 1: key 取值,key 不存在直接报错

python 复制代码
student = {"name":"张三","age":20}
print(student["name"])
# print(student["score"]) # key不存在,KeyError

输出:

plaintext 复制代码
张三

方式 2: .get() 推荐办公自动化使用,不会报错

python 复制代码
print(student.get("name"))
print(student.get("score", 0)) # key不存在返回默认值0,不会抛异常

输出:

plaintext 复制代码
张三
0

办公读 Excel、解析接口,优先用 .get(),防止某一行缺少字段程序直接崩掉。

3. 新增 / 修改元素

字典 key 存在就是修改;key 不存在就是新增

python 复制代码
student = {"name":"张三","age":20}
student["age"] = 21 # key存在,修改
student["score"] = 88 # key不存在,新增键值对
print(student)

输出:

plaintext 复制代码
{'name': '张三', 'age': 21, 'score': 88}

4. 删除字典元素

python 复制代码
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)

输出:

plaintext 复制代码
pop删除的值: 88
pop之后字典: {'name': '张三', 'age': 20}
del之后字典: {'name': '张三'}
clear清空后: {}

5. 字典常用内置方法

python 复制代码
info = {"name":"李四","age":22,"city":"合肥"}
#获取全部键
print(info.keys())
#获取全部值
print(info.values())
#获取全部键值对,遍历用
print(info.items())

输出:

plaintext 复制代码
dict_keys(['name', 'age', 'city'])
dict_values(['李四', 22, '合肥'])
dict_items([('name', '李四'), ('age', 22), ('city', '合肥')])

遍历字典(办公写脚本最高频)

python 复制代码
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}")

输出:

plaintext 复制代码
---遍历key方式---
name 李四
age 22
city 合肥
---遍历items方式---
键:name,值:李四
键:age,值:22
键:city,值:合肥

6. 字典嵌套(处理 Excel 复杂表格、JSON)

表格一行数据经常封装成嵌套字典,办公自动化非常常见

python 复制代码
staff = {
    "emp001": {"name":"小明","salary":6000},
    "emp002": {"name":"小红","salary":7000}
}
#取值
print(staff["emp001"]["salary"])
print(staff["emp002"]["name"])

输出:

plaintext 复制代码
6000
小红

7. 字典推导式(快速生成字典)

python 复制代码
# 简单示例:数字:平方
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)

输出:

plaintext 复制代码
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
{3: 9, 4: 16, 5: 25}

8. 办公实战小案例:模拟 Excel 读取一行表格

从表格读取一行,封装字典,方便按列名字取值,不用记列索引号

python 复制代码
# 表头
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)

输出:

plaintext 复制代码
老王
9500
{'姓名': '老王', '年龄': 35, '工资': 9500}

9. 字典与列表对比总结

|----------|---------|------|---------------|
| 容器 | 查找方式 | 是否可变 | 场景 |
| list 列表 | 数字下标 | 可变 | 有序一组数据 |
| tuple 元组 | 数字下标 | 不可变 | 固定不变序列 |
| dict 字典 | key 键查询 | 可变 | 键‑值映射,表格、JSON |

相关推荐
蹊黎3 小时前
C++中vector类的部分简单实现
开发语言·c++·visual studio
IT_Octopus7 小时前
【零基础入门 LLM 开发 · Day 13】:LangChain 的对话记忆——Message 对象版
人工智能·python·langchain
2603_965148118 小时前
社区与学习资源:从入门到精通的API选品学习路径
数据库·人工智能·python·学习·数据挖掘
程序猿追9 小时前
kotlin-retry 接入鸿蒙后,怎样确认它真的会停止重试
开发语言·kotlin·harmonyos
我是人✓9 小时前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
智能直播9 小时前
网络RTMP拉流不卡顿、声音不同步,一文讲透缓冲区、时间戳
开发语言·ffmpeg·php·音视频·视频编解码
CCblandy9 小时前
令牌桶在 0.9 倍负载超发 19%、固定窗口边界放行 20 个:四种限流算法同构实测
后端·python·算法·性能优化·架构
墨云安全10 小时前
内网资产无法暴露到公网,怎么做安全检测?2026 年内网渗透测试的落地路径
开发语言·安全·网络安全·渗透测试·php
摇滚侠10 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记
Cc.Y10 小时前
Java零基础入门:深入Java核心:文件IO与序列化全解
java·开发语言·python