Python 教程 14:字典基础
“一把钥匙开一把锁。”
字典(Dictionary)是 Python 中最灵活、最强大的数据结构之一。它通过"键-值对"的方式存储数据,就像真实世界的字典用单词查释义一样。
1. 什么是字典
字典是一个无序的、可变的键值对集合。
1# 创建字典
2empty_dict = {} # 空字典
3user = {
4 "name": "张三",
5 "age": 25,
6 "city": "北京"
7}
8
9# 使用dict()函数
10from_pairs = dict([("a", 1), ("b", 2)])
11from_keywords = dict(name="李四", age=30)
12
13# 字典推导式
14squares = {x: x**2 for x in range(5)}
15# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
2. 访问字典
1user = {"name": "张三", "age": 25, "city": "北京"}
2
3# 方法1:[]访问
4print(user["name"]) # 张三
5# print(user["phone"]) # KeyError: 键不存在会报错
6
7# 方法2:get()方法(推荐)
8print(user.get("name")) # 张三
9print(user.get("phone")) # None(不报错)
10print(user.get("phone", "未设置")) # 未设置(默认值)
11
12# 检查键是否存在
13print("name" in user) # True
14print("phone" in user) # False
15print("phone" not in user) # True
3. 修改字典
1user = {"name": "张三", "age": 25}
2
3# 修改值
4user["age"] = 26
5print(user) # {'name': '张三', 'age': 26}
6
7# 添加键值对
8user["city"] = "上海"
9print(user) # {'name': '张三', 'age': 26, 'city': '上海'}
10
11# 删除键值对
12del user["city"]
13print(user) # {'name': '张三', 'age': 26}
14
15# pop():删除并返回值
16age = user.pop("age")
17print(age) # 26
18print(user) # {'name': '张三'}
19
20# popitem():删除并返回最后一个键值对(3.7+有序)
21user = {"a": 1, "b": 2, "c": 3}
22item = user.popitem()
23print(item) # ('c', 3)
4. 字典常用方法
获取键、值、项
1user = {"name": "张三", "age": 25, "city": "北京"}
2
3# keys():所有键
4print(user.keys()) # dict_keys(['name', 'age', 'city'])
5print(list(user.keys())) # ['name', 'age', 'city']
6
7# values():所有值
8print(user.values()) # dict_values(['张三', 25, '北京'])
9print(list(user.values())) # ['张三', 25, '北京']
10
11# items():所有键值对
12print(user.items())
13# dict_items([('name', '张三'), ('age', 25), ('city', '北京')])
14
15# 转换为列表
16items_list = list(user.items())
17print(items_list)
18# [('name', '张三'), ('age', 25), ('city', '北京')]
更新和清空
1user = {"name": "张三", "age": 25}
2
3# update():更新字典
4user.update({"age": 26, "city": "北京"})
5print(user)
6# {'name': '张三', 'age': 26, 'city': '北京'}
7
8# 也可以用关键字参数
9user.update(phone="13800138000")
10print(user)
11
12# clear():清空字典
13user.clear()
14print(user) # {}
setdefault()
如果键存在,返回其值;否则设置默认值并返回:
1user = {"name": "张三"}
2
3# 键存在,返回现有值
4name = user.setdefault("name", "默认")
5print(name) # 张三
6
7# 键不存在,设置并返回默认值
8age = user.setdefault("age", 18)
9print(age) # 18
10print(user) # {'name': '张三', 'age': 18}
5. 遍历字典
1user = {"name": "张三", "age": 25, "city": "北京"}
2
3# 遍历键
4for key in user:
5 print(key, user[key])
6
7# 遍历键(明确)
8for key in user.keys():
9 print(key)
10
11# 遍历值
12for value in user.values():
13 print(value)
14
15# 遍历键值对(最常用)
16for key, value in user.items():
17 print(f"{key}: {value}")
6. 字典的键
字典的键必须是不可变类型:
1# 可以作为键的类型
2d = {}
3d[1] = "整数"
4d[3.14] = "浮点数"
5d["name"] = "字符串"
6d[(1, 2)] = "元组"
7
8# 不能作为键的类型
9# d[[1, 2]] = "列表" # TypeError: 列表可变
10# d[{"a": 1}] = "字典" # TypeError: 字典可变
为什么:字典内部用哈希表实现,键需要计算哈希值,可变对象的哈希值会变化。
7. 字典的值
值可以是任意类型,包括列表、字典等:
1# 嵌套字典
2student = {
3 "name": "张三",
4 "scores": {
5 "math": 95,
6 "english": 88
7 },
8 "friends": ["李四", "王五"]
9}
10
11# 访问嵌套数据
12print(student["scores"]["math"]) # 95
13print(student["friends"][0]) # 李四
8. 字典的应用
应用 1:计数器
1text = "hello world"
2counter = {}
3
4for char in text:
5 if char in counter:
6 counter[char] += 1
7 else:
8 counter[char] = 1
9
10print(counter)
11# {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
12
13# 更简洁的写法
14counter = {}
15for char in text:
16 counter[char] = counter.get(char, 0) + 1
应用 2:配置管理
1config = {
2 "host": "localhost",
3 "port": 8080,
4 "debug": True,
5 "database": {
6 "user": "admin",
7 "password": "secret"
8 }
9}
10
11print(config["database"]["user"])
应用 3:数据转换
1# 映射表
2weekdays = {
3 1: "星期一",
4 2: "星期二",
5 3: "星期三",
6 # ...
7}
8
9day_num = 1
10print(weekdays.get(day_num, "无效日期"))
9. 字典与列表的对比
| 特性 | 字典 | 列表 |
|---|---|---|
| 访问方式 | 键 | 索引 |
| 有序性 | 有序(3.7+) | 有序 |
| 查找速度 | O(1) | O(n) |
| 适用场景 | 键值映射 | 序列数据 |
10. 小结
今天我们学习了字典的基础操作:
- 创建:
{}、dict()、字典推导式 - 访问:
[]、get() - 修改:赋值、
del、pop() - 方法:keys()、values()、items()、update()
- 遍历:for-in 遍历键值对
- 键的要求:必须不可变
- 应用:计数、配置、映射
字典是 Python 最强大的数据结构之一,下一课我们将学习更高级的字典操作。
练习题:
- 统计一个字符串中每个字符出现的次数
- 合并两个字典,相同键的值相加
- 反转字典(键值互换)
本文代码示例:
关注公众号:极客老墨
更多 AI 应用开发、工程实践和效率工具分享,欢迎扫码关注。
