第五章:数据结构(下)——字典与集合的键值对哲学
1. 字典(Dictionary):自带导航的“超级通讯录”
各位少侠,上回我们学了列表,它像个排队买票的队伍,想找人得从头数到尾(索引)。但如果队伍里有几万人,找个“张三”岂不是要数到眼花?
这时候,字典(dict) 闪亮登场!它就像现实生活中的字典或者通讯录,不需要知道你在第几页,只要知道“名字(Key)”,就能瞬间翻到“解释(Value)”。
创建字典:用大括号 {} 包裹,格式是 键: 值。
python
hero_info = {
"name": "亚瑟",
"role": "坦克",
"hp": 5000,
"skill": "回旋打击"
}
字典的“超能力”:
- 极速查询:
hero_info["name"]直接拿到 "亚瑟"。不需要管它在内存的哪个角落,Key就是它的身份证。 - 灵活修改:
hero_info["hp"] = 6000给亚瑟加个buff。 - 新增条目:
hero_info["skin"] = "死亡骑士"字典里没有这个Key?没关系,直接给你加上。 - 安全获取:用
hero_info.get("age", 18)。如果字典里没有 "age" 这个键,它会贴心地返回默认值 18,而不是直接报错崩溃。
注意:字典的 Key 必须是不可变的(比如字符串、数字、元组),你不能把一个列表当成 Key,因为列表天天变,字典会找不到北。
2. 集合(Set):有洁癖的“独行侠”
集合也是用大括号 {},但它没有“值”,只有一堆元素。它最大的特点就两个字:唯一。
python
unique_numbers = {1, 2, 3, 3, 2, 1}
print(unique_numbers) # 输出结果:{1, 2, 3}
看到没?集合有严重的“重复恐惧症”,你塞进去一堆重复数据,它会毫不留情地全部删掉,只留一份。
集合的“数学天赋”: 集合最强大的地方在于数学运算,比如你有两个群的用户名单:
python
group_a = {"刘备", "关羽", "张飞"}
group_b = {"曹操", "刘备", "郭嘉"}
- 交集(&):
group_a & group_b得到{"刘备"}(两个群都是大佬的人)。 - 并集(|):
group_a | group_b得到所有去重后的名字。 - 差集(-):
group_a - group_b得到{"关羽", "张飞"}(刘备群里独有,曹操群里没有的人)。
3. 字典与集合的“相爱相杀”
- 字典 适合存“有对应关系”的数据,比如配置文件、用户信息、商品库存。
- 集合 适合做“去重”和“关系比对”,比如过滤垃圾邮件列表、计算共同好友。
它们底层都是用**哈希表(Hash Table)**实现的,所以查询速度极快(O(1)复杂度),比列表那种从头遍历(O(n))快得多。
4. 本章小结与课后“折磨”
今天你解锁了Python数据结构的另外两员大将:字典(Key-Value键值对,查询神器)和集合(自动去重,数学运算高手)。
课后小挑战:
- 创建一个字典
student,包含姓名、年龄、成绩。 - 尝试打印
student.get("address", "未知"),看看会发生什么。 - 创建两个集合
likes_apple = {"张三", "李四", "王五"}和likes_banana = {"李四", "赵六"}。 - 用集合运算找出既喜欢苹果又喜欢香蕉的人(交集)。
敲完代码,恭喜你,Python基础数据结构你已经全部通关!下一节,我们将进入函数与模块的世界,把代码变成乐高积木!
本文由 AI 辅助生成
参考资料:
- Python官方字典与集合文档:https://docs.python.org/zh-cn/3/tutorial/datastructures.html#dictionaries
- Python官方映射类型文档:https://docs.python.org/zh-cn/3/library/stdtypes.html#mapping-types-dict
- Real Python字典教程:https://realpython.com/python-dicts/