Python 程序设计 - 15. 字典 (dict)
1. 引言
在 Python 中,字典(dict)是一种内置的数据结构,它存储键值对(key-value pair)。字典是一种无序的数据结构,支持通过键来高效地查找对应的值。字典的每个键是唯一的,可以是任何不可变类型(如字符串、数字、元组等),而值可以是任何数据类型。
字典常用于存储具有关联性的数据,例如存储学生信息(学号-姓名),商品库存(商品编号-价格)等。
2. 字典的基本概念
字典是一个由键值对组成的集合,键和值通过冒号(:)分隔,键值对之间用逗号(,)分隔。字典的创建使用大括号 {},或者通过 dict() 函数。
定义字典:
# 使用大括号创建字典
student = {
"name": "Alice",
"age": 22,
"major": "Computer Science"
}
# 使用 dict() 函数创建字典
student2 = dict(name="Bob", age=20, major="Mathematics")
3. 字典的常用操作
3.1 访问字典的值
通过字典的键来访问对应的值。可以使用方括号 [] 来获取值,也可以使用 get() 方法。
student = {"name": "Alice", "age": 22, "major": "Computer Science"}
# 使用键访问值
print(student["name"]) # 输出: Alice
# 使用 get() 方法访问值,如果键不存在,返回 None 或指定默认值
print(student.get("age")) # 输出: 22
print(student.get("address", "Unknown")) # 输出: Unknown
3.2 添加或修改字典的元素
可以直接通过键来修改字典中的值,如果键不存在,则会添加一个新的键值对。
student = {"name": "Alice", "age": 22, "major": "Computer Science"}
# 修改已有键的值
student["age"] = 23
print(student) # 输出: {'name': 'Alice', 'age': 23, 'major': 'Computer Science'}
# 添加新的键值对
student["address"] = "New York"
print(student) # 输出: {'name': 'Alice', 'age': 23, 'major': 'Computer Science', 'address': 'New York'}
3.3 删除字典中的元素
可以使用 del 语句、pop() 方法或 popitem() 方法来删除字典中的元素。
del:删除指定的键值对。pop(key):删除指定键的元素并返回其对应的值。popitem():随机删除一个键值对,并返回该键值对。
student = {"name": "Alice", "age": 23, "major": "Computer Science"}
# 使用 del 删除指定键
del student["age"]
print(student) # 输出: {'name': 'Alice', 'major': 'Computer Science'}
# 使用 pop() 删除并返回键值对
name = student.pop("name")
print(name) # 输出: Alice
print(student) # 输出: {'major': 'Computer Science'}
# 使用 popitem() 删除并返回随机键值对
random_item = student.popitem()
print(random_item) # 输出: ('major', 'Computer Science')
print(student) # 输出: {}
3.4 遍历字典
可以使用 for 循环遍历字典中的键、值或键值对。
student = {"name": "Alice", "age": 23, "major": "Computer Science"}
# 遍历字典的键
for key in student:
print(key)
# 输出:
# name
# age
# major
# 遍历字典的值
for value in student.values():
print(value)
# 输出:
# Alice
# 23
# Computer Science
# 遍历字典的键值对
for key, value in student.items():
print(f"{key}: {value}")
# 输出:
# name: Alice
# age: 23
# major: Computer Science
3.5 字典的键和键值
可以使用 keys() 获取字典的所有键,使用 values() 获取字典的所有值,使用 items() 获取字典的所有键值对。
student = {"name": "Alice", "age": 23, "major": "Computer Science"}
# 获取字典的所有键
print(student.keys()) # 输出: dict_keys(['name', 'age', 'major'])
# 获取字典的所有值
print(student.values()) # 输出: dict_values(['Alice', 23, 'Computer Science'])
# 获取字典的所有键值对
print(student.items()) # 输出: dict_items([('name', 'Alice'), ('age', 23), ('major', 'Computer Science')])
3.6 字典的长度
可以使用 len() 函数来获取字典中键值对的个数。
student = {"name": "Alice", "age": 23, "major": "Computer Science"}
print(len(student)) # 输出: 3
3.7 字典的合并
可以使用 update() 方法合并两个字典。如果有相同的键,后一个字典的值会覆盖前一个字典的值。
student = {"name": "Alice", "age": 23}
contact = {"phone": "123-456-7890", "email": "alice@example.com"}
# 使用 update() 合并字典
student.update(contact)
print(student) # 输出: {'name': 'Alice', 'age': 23, 'phone': '123-456-7890', 'email': 'alice@example.com'}
4. 字典的应用场景
字典在 Python 中非常常用,特别是在处理具有映射关系的数据时。例如,存储员工信息、商品价格、学生成绩等。字典常见的应用场景包括:
- 存储关联数据:如用户名和密码、学生与成绩的对应关系等。
- 数据分析:字典可以作为键值对的容器,存储统计结果或分析结果。
- 实现映射:字典可以用于实现某种映射关系,如将字符串映射到数字,或通过键查找对应的数据。
5. 字典常见方法
| 方法 | 描述 |
|---|---|
clear() | 删除字典中的所有元素 |
copy() | 返回字典的一个浅拷贝 |
fromkeys(iterable, value) | 创建一个新字典,其中包含给定的 iterable 中的元素作为键,值为指定的 value |
get(key, default) | 返回键 key 对应的值,如果键不存在,返回 default |
items() | 返回字典的所有键值对 |
keys() | 返回字典的所有键 |
pop(key) | 删除指定键并返回对应的值 |
popitem() | 删除并返回字典中的一个键值对 |
setdefault(key, default) | 如果键不存在,则插入键和默认值,并返回默认值 |
update(other) | 使用另一个字典的键值对更新当前字典 |
values() | 返回字典的所有值 |
6. 练习题
练习 1:创建字典并访问元素
# 创建字典并访问元素
person = {"name": "John", "age": 30, "city": "New York"}
print(person["name"]) # 输出: John
print(person.get("age")) # 输出: 30
练习 2:修改字典中的值
person = {"name": "John", "age": 30, "city": "New York"}
# 修改 age 的值
person["age"] = 31
print(person) # 输出: {'name': 'John', 'age': 31, 'city': 'New York'}
练习 3:删除字典中的元素
person = {"name": "John", "age": 30, "city": "New York"}
# 删除 city 键值对
del person["city"]
print(person) # 输出: {'name': 'John', 'age': 30}
练习 4:字典合并
dict1 = {"name": "John", "age": 30}
dict2 = {"city": "New York", "job": "Engineer"}
dict1.update(dict2)
print(dict1) # 输出: {'name': 'John', 'age': 30, 'city': 'New York', 'job': 'Engineer'}
评论区