2026/4/6 10:57:17
网站建设
项目流程
南江县建设局网站,北京网站建设 奥美通全网营销,外贸主动营销网站建设,asp.net 网站开发视频教程Day 09#xff1a;【99天精通Python】字典与集合 - 键值对与去重利器
前言
欢迎来到第9天#xff01;
在之前的学习中#xff0c;我们使用了列表和元组来存储有序的数据序列。但是#xff0c;如果我们想要存储姓名对应的电话号码#xff0c;或者【99天精通Python】字典与集合 - 键值对与去重利器前言欢迎来到第9天在之前的学习中我们使用了列表和元组来存储有序的数据序列。但是如果我们想要存储姓名对应的电话号码或者商品ID对应的价格用列表就显得有点麻烦了你需要两个列表或者去遍历查找。今天我们要介绍Python中两个非常强大的数据结构字典Dictionary和集合Set。它们不再通过索引0, 1, 2…来访问数据而是通过键Key或者内容本身来快速定位。本节内容字典的概念与创建字典的增删改查字典的常用方法与遍历集合的创建与去重集合的数学运算交集、并集等实战练习一、字典Dictionary键值对的管家1.1 什么是字典字典是Python中唯一的内置映射类型。它存储的是键值对Key-Value Pair。就像我们要查《新华字典》一样通过拼音Key能快速找到对应的汉字解释Value。特点键值对数据以key: value形式存储。键唯一同一个字典中键必须是唯一的。无序性在Python 3.6之前字典无序3.7开始保留插入顺序但我们通常仍将其视为无序容器。可变可以动态增删改。字典Key: nameValue: AliceKey: ageValue: 25Key: cityValue: Beijing1.2 创建字典# 方式1使用花括号 {}最常用person{name:Alice,age:25,is_student:True}# 方式2使用 dict() 函数bookdict(titlePython入门,price59.9,authorGuido)# 方式3创建空字典empty_dict{}# 或者empty_dict2dict()print(person)print(book)注意字典的键Key必须是不可变类型如字符串、数字、元组通常使用字符串。**值Value**可以是任意类型。1.3 访问字典的值person{name:Alice,age:25}# 方式1通过键访问 [key]print(person[name])# Alice# 如果键不存在会报错 KeyError# print(person[gender]) # KeyError: gender# 方式2使用 get(key) 方法推荐print(person.get(name))# Aliceprint(person.get(gender))# None键不存在时不报错返回None# get() 可以设置默认值print(person.get(gender,未知))# 未知二、字典的增删改查2.1 添加与修改字典的添加和修改语法是一样的dict[key] value。如果键不存在 -添加如果键已存在 -修改info{name:Bob}# 添加info[age]30print(info)# {name: Bob, age: 30}# 修改info[name]Bobbyprint(info)# {name: Bobby, age: 30}2.2 删除元素info{name:Bobby,age:30,city:Shanghai}# 1. del 关键字delinfo[age]print(info)# {name: Bobby, city: Shanghai}# 2. pop(key) - 删除并返回值cityinfo.pop(city)print(city)# Shanghaiprint(info)# {name: Bobby}# 3. clear() - 清空字典info.clear()print(info)# {}2.3 常用操作student{id:101,name:Tom,score:95}# 获取所有键print(student.keys())# dict_keys([id, name, score])# 获取所有值print(student.values())# dict_values([101, Tom, 95])# 获取所有键值对print(student.items())# dict_items([(id, 101), (name, Tom), (score, 95)])# 检查键是否存在print(nameinstudent)# Trueprint(ageinstudent)# False三、字典的遍历由于字典存储的是键值对遍历方式比较灵活。scores{Alice:95,Bob:88,Charlie:92}# 1. 默认遍历遍历键fornameinscores:print(name)# 2. 遍历值forscoreinscores.values():print(score)# 3. 遍历键值对最常用forname,scoreinscores.items():print(f{name}的分数是:{score})四、集合Set去重专家4.1 什么是集合集合Set是一个无序的、不重复的元素序列。它的主要作用是去重和数学集合运算。你可以把它理解为只有 Key 没有 Value 的字典。4.2 创建集合# 方式1使用花括号 {}fruits{apple,banana,orange,apple}# 重复的apple会被自动去除print(fruits)# {banana, orange, apple}顺序不固定# 方式2使用 set() 函数常用于列表去重numbers[1,2,2,3,3,3]unique_numsset(numbers)print(unique_nums)# {1, 2, 3}# 【注意】创建空集合必须用 set()不能用 {}empty_setset()empty_dict{}# 这是空字典4.3 集合的操作s{1,2,3}# 添加s.add(4)print(s)# {1, 2, 3, 4}# 删除s.remove(2)# 如果元素不存在会报错s.discard(10)# 如果元素不存在不会报错推荐print(s)# {1, 3, 4}# 随机弹出一个元素items.pop()4.4 集合运算交、并、差集合最强大的地方在于数学运算。a{1,2,3,4}b{3,4,5,6}# 交集 ()两者都有的print(ab)# {3, 4}print(a.intersection(b))# 并集 (|)两者合起来的去重print(a|b)# {1, 2, 3, 4, 5, 6}print(a.union(b))# 差集 (-)a中有但b中没有的print(a-b)# {1, 2}print(a.difference(b))# 对称差集 (^)互相没有的并集 - 交集print(a^b)# {1, 2, 5, 6}并集 A | B集合 B56集合 A12交集 A B34五、列表、字典、集合对比特性列表 (List)字典 (Dict)集合 (Set)定义符号[]{k:v}{}有序性有序3.7保留顺序无序重复性允许重复键不可重复不可重复访问方式索引[0]键[key]无法直接访问单个查询速度慢 O(n)快 O(1)快 O(1)用途顺序数据键值对应数据去重、集合运算性能小贴士如果你需要在海量数据中快速查找某个元素是否存在使用字典或集合比列表快得多哈希查找 vs 遍历查找。六、实战练习练习1词频统计统计一段文本中每个单词出现的次数。textpython java python c java python pythonwordstext.split()# 将字符串分割成列表# 方式1使用普通字典counts{}forwordinwords:ifwordincounts:counts[word]1else:counts[word]1print(counts)# {python: 4, java: 2, c: 1}# 方式2使用 get() 简化counts{}forwordinwords:counts[word]counts.get(word,0)1print(counts)练习2列表去重并保持顺序列表[1, 5, 2, 1, 9, 1, 5]去除重复元素。data[1,5,2,1,9,1,5]# 简单去重顺序可能会乱print(list(set(data)))# 保持顺序去重利用字典键的特性Python 3.7print(list(dict.fromkeys(data)))# [1, 5, 2, 9]练习3共同好友推荐用户A的好友是{小红, 小明, 小刚}用户B的好友是{小红, 小强, 小刚}。找出他们的共同好友。找出可能认识的人A的好友中B不认识的或反之。friends_a{小红,小明,小刚}friends_b{小红,小强,小刚}# 共同好友 (交集)commonfriends_afriends_bprint(f共同好友:{common})# {小红, 小刚}# 可能认识的人 (对称差集)maybe_knowfriends_a^friends_bprint(f推荐好友:{maybe_know})# {小明, 小强}七、常见问题Q1字典的键可以是列表吗不可以。字典的键必须是不可变类型可哈希的。列表是可变的所以不能做键。但元组可以只要元组里不包含可变对象。# { [1, 2]: value } # 报错 TypeError: unhashable type: list{(1,2):value}# 正确Q2字典和JSON是一回事吗非常像但不是一回事。字典Python的一种数据结构。JSON一种数据交换格式字符串。它们可以通过json模块相互转换。八、小结Day 09 字典与集合字典 Dict集合 Set键值对 {k:v}查询速度快 O(1)方法: get, keys, items无序不重复 {}去重运算: | - ^关键要点遇到键值对应的数据首选字典。遇到去重或集合运算的需求首选集合。字典的.get()方法可以避免 Key不存在导致的报错。字典和集合的查找速度非常快适合处理大量数据的检索。九、课后作业通讯录系统创建一个空字典作为通讯录实现循环输入用户的姓名和电话如果姓名已存在则提示更新输入quit退出并打印所有联系人。字符统计输入一个字符串统计每个字符出现的次数不区分大小写并按字符顺序输出。选课系统选择了Python课程的学生集合{A, B, C, D}选择了Java课程的学生集合{C, D, E, F}请计算同时选了两门课的学生只选了Python的学生总共有多少学生选课下节预告Day 10函数基础Function- 我们将学习如何将代码打包成可重复使用的模块这是编程进阶的第一步系列导航上一篇Day 08 - 列表推导式与元组下一篇Day 10 - 函数基础待更新