字典就像现实中的字典一样,通过"键(key)"快速查找对应的"值(value)"。
# 创建字典
student_scores = {"小明": 90, "小红": 85, "小刚": 92}
# 查找成绩
print(student_scores["小明"]) # 输出: 90
字典使用哈希表实现,查找速度是O(1)级别,不会随着数据量增加而变慢。
# 添加新学生
student_scores["小李"] = 88
# 修改成绩
student_scores["小明"] = 95
if "小红" in student_scores:
print("小红在班级中")
# 安全获取
score = student_scores.get("小张", 0) # 不存在返回0
removed_score = student_scores.pop("小刚") # 删除并返回值
# 遍历所有键值对
for name, score in student_scores.items():
print(f"{name}: {score}")
# 只遍历键
for name in student_scores.keys():
print(name)
# 只遍历值
for score in student_scores.values():
print(score)
集合是一组不重复且无序的元素。
# 创建集合
fruit_set = {"apple", "banana", "orange"}
# 自动去重
unique_numbers = {1, 2, 2, 3, 3} # 变为{1, 2, 3}
fruit_set.add("grape") # 添加
fruit_set.remove("banana") # 删除(不存在会报错)
fruit_set.discard("melon") # 安全删除(不存在不报错)
a = {1, 2, 3}
b = {2, 3, 4}
print(a | b) # 并集: {1, 2, 3, 4}
print(a & b) # 交集: {2, 3}
print(a - b) # 差集: {1}
print({1, 2} <= {1, 2, 3}) # 子集判断: True
print(2 in a) # 存在判断: True
字典的键和集合的元素必须是不可变类型:
允许:字符串、数字、元组
禁止:列表、字典、集合
# 正确示例
valid_dict = {("北京", "上海"): "城市", 42: "答案"}
# 错误示例
invalid_dict = {["a", "b"]: "列表"} # 报错
text = "apple banana apple orange banana apple"
words = text.split()
word_count = {}
for word in words:
word_count[word] = word_count.get(word, 0) + 1
print(word_count) # {'apple': 3, 'banana': 2, 'orange': 1}
friends = {
"小明": {"小红", "小刚"},
"小红": {"小明", "小丽"},
"小刚": {"小明"}
}
# 添加好友
friends["小明"].add("小丽")
# 共同好友
common = friends["小明"] & friends["小红"] # {"小红"}
为什么字典键必须是不可变的?
因为字典通过键的哈希值来存储数据,可变对象的哈希值会变化
集合和列表有什么区别?
集合:无序、不重复、查找快
列表:有序、可重复、按顺序存储
如何选择使用字典还是集合?
需要存储键值对 → 字典
只需要存储唯一元素 → 集合
字典和JSON有什么关系?
Python字典和JSON格式可以互相转换
import json; json_data = json.dumps(my_dict)
记住:字典和集合是Python中非常高效的数据结构,合理使用可以大幅提升程序性能!