一、什么是字典
字典是 Python 中一种非常重要的数据结构,用于存储键值对(key-value pairs)。它是一种无序、可变、可索引的集合。
特点
键(Key):必须是唯一的、不可变的(如字符串、数字、元组)
值(Value):可以是任意类型的数据(字符串、数字、列表、字典等)
无序:在 Python 3.7 之前,字典是无序的;3.7+ 版本字典会保持插入顺序
可变:可以随时添加、删除、修改键值对
二、字典的创建
# 方式1:使用大括号
person= {
"name": "张三",
"age": 25,
"city": "北京"
}
# 方式2:使用 dict() 函数
student=dict(name="李四", age=20, major="计算机")
# 方式3:空字典
empty_dict= {}
empty_dict2=dict()
# 方式4:使用键值对列表
items= [("a", 1), ("b", 2), ("c", 3)]
my_dict=dict(items)
三、字典的基本操作
1. 访问值
person= {"name": "张三", "age": 25, "city": "北京"}
# 方式1:使用键索引
print(person["name"]) # 输出: 张三
# 方式2:使用 get() 方法(推荐,更安全)
print(person.get("age")) # 输出: 25
print(person.get("gender", "未知")) # 键不存在时返回默认值2. 添加/修改键值对
person= {"name": "张三", "age": 25}
# 添加新键值对
person["city"] ="北京"
print(person) # {'name': '张三', 'age': 25, 'city': '北京'}
# 修改已有键的值
person["age"] =26
print(person) # {'name': '张三', 'age': 26, 'city': '北京'}
# 使用 update() 方法批量更新
person.update({"email": "zhangsan@example.com", "phone": "13800138000"})3. 删除键值对
person= {"name": "张三", "age": 25, "city": "北京"}
# 方式1:使用 del 关键字
delperson["city"]
# 方式2:使用 pop() 方法(返回被删除的值)
age=person.pop("age")
print(age) # 输出: 25
# 方式3:使用 popitem() 方法(删除最后一个键值对,Python 3.7+)
last_item=person.popitem()
# 方式4:清空字典
person.clear()4. 检查键是否存在
person= {"name": "张三", "age": 25}
print("name"inperson) # True
print("gender"inperson) # False四、字典的常用方法
1. 获取所有键、值、键值对
person= {"name": "张三", "age": 25, "city": "北京"}
# 获取所有键
print(person.keys()) # dict_keys(['name', 'age', 'city'])
# 获取所有值
print(person.values()) # dict_values(['张三', 25, '北京'])
# 获取所有键值对
print(person.items()) # dict_items([('name', '张三'), ('age', 25), ('city', '北京')])2. 复制字典
person= {"name": "张三", "age": 25}
# 浅拷贝
person_copy=person.copy()
# 使用 dict() 函数
person_copy2=dict(person)3. 字典长度
person= {"name": "张三", "age": 25, "city": "北京"}
print(len(person)) # 输出: 3五、字典的遍历
person= {"name": "张三", "age": 25, "city": "北京"}
# 遍历键
forkeyinperson:
print(key)
# 遍历值
forvalueinperson.values():
print(value)
# 遍历键值对(最常用)
forkey, valueinperson.items():
print(f"{key}: {value}")六、嵌套字典
字典可以嵌套使用,形成更复杂的数据结构:
students= {
"001": {
"name": "张三",
"age": 20,
"courses": ["数学", "英语", "计算机"]
},
"002": {
"name": "李四",
"age": 21,
"courses": ["物理", "化学", "生物"]
}
}
# 访问嵌套字典
print(students["001"]["name"]) # 张三
print(students["002"]["courses"][0]) # 物理七、字典推导式
类似于列表推导式,字典也有推导式:
# 基本语法:{key: value for item in iterable}
# 示例1:创建平方数字典
squares= {x: x**2forxinrange(1, 6)}
print(squares) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# 示例2:带条件的字典推导式
even_squares= {x: x**2forxinrange(1, 11) ifx%2==0}
print(even_squares) # {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}八、实际应用场景
1. 配置管理
config= {
"database": {
"host": "localhost",
"port": 3306,
"user": "root",
"password": "123456"
},
"server": {
"host": "0.0.0.0",
"port": 8000
}
}2. 统计计数
text="hello world hello python"
words=text.split()
word_count= {}
forwordinwords:
ifwordinword_count:
word_count[word] +=1
else:
word_count[word] =1
print(word_count) # {'hello': 2, 'world': 1, 'python': 1}
3. 用户信息存储
user = {
"id": 1001,
"username": "zhangsan",
"email": "zhangsan@example.com",
"is_active": True,
"roles": ["admin", "user"]
}九、注意事项
键必须唯一:如果同一个键被赋值多次,后面的值会覆盖前面的值
键必须不可变:不能使用列表作为键,但可以使用元组
访问不存在的键:使用 [] 索引会报错,使用 get() 方法更安全
性能优势:字典的查找、插入、删除操作都是 O(1) 时间复杂度,非常高效