字典
字典(dictionary)是 Python 中用来存"键值对"的数据结构。如果列表是靠编号找元素,字典就是靠"名字"找元素。它非常适合存储结构化数据,比如学生信息、配置项、统计结果等。
创建字典
用花括号 {} 定义,每个键值对用冒号 : 分隔:
student = {"name": "Alice", "major": "CS", "year": 3}
print(student["name"]) # Alice
print(student["major"]) # CS
键必须是唯一的,值可以是任何类型(字符串、数字、列表、甚至另一个字典)。
添加和修改
给不存在的键赋值就是添加:
student = {"name": "Alice", "major": "CS"}
student["year"] = 3 # 添加新键值对
student["major"] = "AI" # 修改已有值
print(student)
# {'name': 'Alice', 'major': 'AI', 'year': 3}
删除键值对
用 del 删除:
student = {"name": "Alice", "major": "CS", "year": 3}
del student["year"]
print(student)
# {'name': 'Alice', 'major': 'CS'}
用 get() 安全取值
直接用 [] 取不存在的键会报错:
student = {"name": "Alice"}
print(student["gpa"]) # KeyError
用 get() 可以避免报错,还可以指定默认值:
student = {"name": "Alice"}
gpa = student.get("gpa", "未录入")
print(gpa) # 未录入
空字典
有时候需要先生成空字典,再往里填数据:
members = {}
members["Alice"] = "Python"
members["Bob"] = "C++"
print(members)
# {'Alice': 'Python', 'Bob': 'C++'}
遍历字典
遍历所有键值对
用 items() 方法:
members = {
"Alice": "Python",
"Bob": "C++",
"Carol": "Rust",
}
for name, language in members.items():
print(f"{name} 喜欢 {language}")
输出:
Alice 喜欢 Python
Bob 喜欢 C++
Carol 喜欢 Rust
只遍历键
用 keys() 或直接遍历字典:
for name in members.keys():
print(name)
# 等价于
for name in members:
print(name)
配合列表做条件判断:
friends = ["Alice", "Bob"]
for name in members:
if name in friends:
print(f"{name} 是我们的老朋友了")
检查某个键是否存在:
if "David" not in members:
print("David 还没填问卷")
按顺序遍历键
字典从 Python 3.7 开始保留插入顺序,但如果你想按字母顺序遍历,可以用 sorted():
for name in sorted(members.keys()):
print(f"感谢 {name} 参与投票")
只遍历值
用 values() 方法:
for language in members.values():
print(language)
如果有重复值,可以用 set() 去重:
members = {"Alice": "Python", "Bob": "Python", "Carol": "Rust"}
for language in set(members.values()):
print(language)
# Python
# Rust
嵌套
字典列表
多个字典放进列表里:
student1 = {"name": "Alice", "score": 90}
student2 = {"name": "Bob", "score": 85}
student3 = {"name": "Carol", "score": 95}
students = [student1, student2, student3]
for s in students:
print(f"{s['name']}: {s['score']} 分")
批量生成数据:
students = []
for i in range(5):
new_student = {"name": f"学生{i+1}", "score": 0}
students.append(new_student)
for s in students[:3]:
print(s)
字典中存列表
值可以是列表,适合一个人有多个属性:
member = {
"name": "Alice",
"skills": ["Python", "PyTorch", "Docker"],
}
print(f"{member['name']} 会的技术:")
for skill in member["skills"]:
print(f" - {skill}")
字典中存字典
适合存储层级结构,比如社团里的用户信息:
users = {
"alice_2024": {
"first": "Alice",
"last": "Wang",
"department": "AI",
},
"bob_2023": {
"first": "Bob",
"last": "Li",
"department": "CV",
},
}
for username, info in users.items():
full_name = f"{info['first']} {info['last']}"
print(f"{username}: {full_name} ({info['department']})")
嵌套层级不要太深,一般两三层就够了。太深的话代码难读,可以考虑用类或者数据库来替代。