一、字典(dict)是什么
- • 字典是 键值对(key-value) 结构的无序(3.7+有序)可变容器
- • 键(key)必须不可变 + 唯一:字符串、数字、元组
- • 查找速度极快,通过 key 直接找 value
二、字典的创建
1. 直接创建(最常用)
# 空字典
d1 = {}
# 普通字典
d2 = {"name": "小明", "age": 18, "city": "北京"}
# 混合键值
d3 = {1: "a", "id": 1001, (1,2): [3,4]}
2. 使用 dict() 函数创建
d4 = dict(name="小红", age=20)
# {'name': '小红', 'age': 20}
d5 = dict([("name", "小刚"), ("score", 90)])
3. fromkeys 创建统一值字典
d6 = dict.fromkeys(["a", "b", "c"], 0)
# {'a':0, 'b':0, 'c':0}
三、键值对基本操作(增、删、改、查)
1. 查(通过 key 获取 value)
d = {"name": "小明", "age": 18}
print(d["name"]) # 小明
print(d["age"]) # 18
⚠️ 注意:key 不存在会直接报错 KeyError
2. 改(修改已有 key 的 value)
key 存在就是修改
d["age"] = 19
print(d) # {'name': '小明', 'age': 19}
3. 增(添加新 key-value)
key 不存在就是新增
d["city"] = "上海"
print(d) # {'name': '小明', 'age': 19, 'city': '上海'}
4. 删除(del 语句)
del d["city"]
print(d) # city 被删除
四、字典常用方法(高频重点)
1. get(key, default=None) 安全获取
key 不存在不报错,返回默认值
d = {"name": "小明"}
print(d.get("name")) # 小明
print(d.get("age")) # None
print(d.get("age", 0)) # 0
2. keys() 获取所有键
d = {"a":1, "b":2, "c":3}
print(d.keys()) # dict_keys(['a', 'b', 'c'])
# 遍历
for k in d.keys():
print(k)
3. values() 获取所有值
print(d.values()) # dict_values([1,2,3])
4. items() 获取所有键值对(最常用)
print(d.items())
# dict_items([('a',1), ('b',2), ('c',3)])
# 遍历键值对
for k, v in d.items():
print(k, v)
5. update() 批量更新/添加
d = {"name": "小明"}
d.update({"age":18, "city":"北京"})
print(d)
# {'name':'小明', 'age':18, 'city':'北京'}
6. pop(key) 删除指定 key 并返回 value
d = {"a":1, "b":2}
val = d.pop("a")
print(val) # 1
print(d) # {'b':2}
7. popitem() 删除最后一对(3.7+)
d.popitem()
8. clear() 清空字典
d.clear() # {}
五、字典遍历(3 种方式)
d = {"name": "小明", "age": 18}
# 1. 遍历 key
for k in d:
print(k, d[k])
# 2. 遍历 key
for k in d.keys():
print(k)
# 3. 遍历键值对(最推荐)
for k, v in d.items():
print(k, v)
六、字典推导式(Dict Comprehension)
和列表推导式类似,语法:
{键表达式: 值表达式 for 变量 in 可迭代对象 if 条件}
1. 基础字典推导式
# 生成 {0:0, 1:1, ... 9:9}
d = {i:i for i inrange(10)}
2. 键值互换
d = {"a":1, "b":2}
reverse_d = {v:k for k,v in d.items()}
# {1:'a', 2:'b'}
3. 带条件筛选
d = {"a":1, "b":2, "c":3, "d":4}
new_d = {k:v for k,v in d.items() if v % 2 == 0}
# {'b':2, 'd':4}
4. 列表转字典
lst = [("name","小明"), ("age",18)]
d = {k:v for k,v in lst}
七、字典的 key 规则(必记)
- 1. key 必须不可变:str / int / float / tuple
d = {"a":1, "a":2}
print(d) # {'a':2}
八、字典 vs 列表 对比
📚 练习题(带答案讲解)
练习1
创建字典,添加、修改、获取值
stu = {"id": 1001, "name": "小明"}
stu["age"] = 18
stu["name"] = "小红"
print(stu.get("score", 0))
print(stu)
答案:
0
{'id':1001, 'name':'小红', 'age':18}
练习2
items 遍历
d = {"a":10, "b":20}
for k, v in d.items():
print(k + str(v))
答案:
a10
b20
练习3
字典推导式:把 [1,2,3,4] 变成 {1:1, 2:4, 3:9, 4:16}
d = {i:i*i for i in [1,2,3,4]}
print(d)
答案:{1:1,2:4,3:9,4:16}
📝 本章总结
- 1. 字典是 key-value 结构,key 必须不可变、唯一
- 2. 增删改查:
d[key]、d[key]=val、del d[key] - •
keys()/values()/items() 遍历