版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章字典与集合CATALOGUE目录01字典02集合03综合实例:文学作品赏析01字典一种重要的映射类型数据结构,它采用与我们平时生活中的字典类似的方式,记录数据(类似于字的释义)和它的某种代表(类似于字本身)之间的对应关系,从而通过代表可以快速定位到数据字典初步基本概念{键1:值1,键2:值2,…}语法>>>score={'王芳':88,'张云':70,'赵文':60,'李强':90}>>>score#在控制台中直接输变量名可以查看这个变量的值{'王芳':88,'张云':70,'赵文':60,'李强':90}示例学生姓名学生成绩王芳88张云70赵文60李强90表6-1学生成绩表一个字典内的所有键不重复字典初步键具有唯一性字典中的键通常应当使用不可变数据类型,通常是字符串、数值类型或元组,而值可以是任意类型的数据
。键只能由不可变数据类型构成从整体来说,字典仍然是一种无序数据容器。键值对的顺序问题>>>empty_dict={}>>>province={'南京':'江苏','苏州':'江苏','杭州':'浙江','北京':'北京','开封':'河南'}>>>empty_dict,province({},{'南京':'江苏','苏州':'江苏','杭州':'浙江','北京':'北京','开封':'河南'})创建字典直接创建字典使用推导式创建字典使用dict()创建字典>>>a={x:x**2forxinrange(10)}>>>a{0:0,1:1,2:4,3:9,4:16,5:25,6:36,7:49,8:64,9:81}>>>empty_dict=dict()>>>province=dict(zip(['南京','苏州','杭州','北京','开封'],
['江苏','江苏','浙江','北京','河南']))>>>empty_dict,province({},{'南京':'江苏','苏州':'江苏','杭州':'浙江','北京':'北京','开封':'河南'})实例6-1学生成绩存储请用合适的数据结构存储以下学生成绩,便于进行查询。学生姓名学生学号学生成绩王芳00188张云00270赵文00360李强00490王芳00580实例6-1学生成绩存储参考代码6-16-1.py1
#用合适的数据结构存储学生成绩,便于查询2
name_id=[('王芳','001'),('张云','002'),('赵文','003'),('李强','004'),('王芳','005')]3
score_list=[88,70,60,90,80]4
#(姓名,学号)作为键,成绩作为值5
score_dict=dict(zip(name_id,score_list))6
print(score_dict)实例6-1学生成绩存储运行结果输出:{('王芳','001'):88,('张云','002'):70,('赵文','003'):60,('李强','004'):90,('王芳','005'):80}对字典成员的操作-查询直接查询采用字典的get()方法>>>province['南京']'江苏'>>>province['深圳']Traceback(mostrecentcalllast):……KeyError:'深圳'>>>prov=province.get('深圳','未记录')>>>prov未记录>>>if'深圳'inprovince:
print(province['深圳'])
else:
print('键不存在')键不存在该方法首先试图读取键对应的值并返回,如果键不存在则返回默认值。对字典成员的操作-修改与添加基本修改与添加采用字典的setdefault()方法>>>province['深圳']='深圳'>>>province['深圳']'深圳'>>>province['深圳']='广东'>>>province['深圳']'广东'如果键已经存在于字典中,setdefault()
不会改变它的值;如果键不存在,setdefault()
会添加它,并将其值设为参数中给定的默认值。最后,setdefault()
还返回一个值,该值是字典中该键的当前值。>>>province{'南京':'江苏','苏州':'江苏','杭州':'浙江','北京':'北京','开封':'河南'}>>>province.setdefault('深圳','广东')'广东'>>>province.setdefault('深圳','深圳')'广东'实例6-2将商品添加到购物车某电商平台采用类似如下字典的结构存放当前所有非空购物车信息,请设计一个函数实现将商品添加到购物车功能。shopping_carts={'user1':{'apple':2,'banana':5},'user2':{'orange':3}}实例6-2将商品添加到购物车参考代码6-26-2.py1
#购物车数据结构2
shopping_carts={3
'user1':{'apple':2,'banana':5},4
'user2':{'orange':3}5
}6
#定义函数将商品添加到购物车7
defadd_to_cart(user,item,quantity,carts):8
ifquantity<0:9
print("Warning:Negativequantity,ignored.")10
return11
cart=carts.setdefault(user,{})12
current_quantity=cart.get(item,0)13
cart[item]=current_quantity+quantity14
return15
add_to_cart('user3','apple',3,shoppting_carts)16
add_to_cart('user1','banana',1,shoppting_carts)17
print(shopping_carts)实例6-2将商品添加到购物车运行结果输出:{'user1':{'apple':2,'banana':6},'user2':{'orange':3}'user3':{'apple':3}}}对字典成员的操作-删除del语句与pop()方法>>>province{'南京':'江苏','苏州':'江苏','杭州':'浙江','北京':'北京','开封':'河南'}>>>delprovince[‘南京’]>>>province.pop(‘苏州’)‘江苏’>>>province{'杭州':'浙江','北京':'北京','开封':'河南'}>>>delprovince['苏州']Traceback(mostrecentcalllast):……KeyError:'苏州'>>>province.pop('苏州',‘未记录’)未记录对字典整体的操作-遍历对键值对的遍历、对键的遍历和对值的遍历>>>foriteminprovince.items():….print(item)('南京','江苏')('苏州','江苏')('杭州','浙江')('北京','北京')('开封','河南')>>>forkeyinprovince.keys():….print(key)南京苏州杭州北京开封>>>forvalueinprovince.values():….print(value)江苏江苏浙江北京河南对字典整体的操作-遍历对键值对的遍历、对键的遍历和对值的遍历>>>fork,vinprovince.items():….print(f"{k}所属的省份是{v}")南京所属的省份是江苏苏州所属的省份是江苏杭州所属的省份是浙江北京所属的省份是北京开封所属的省份是河南对字典整体的操作-字典合并update()方法>>>score_g1={'王芳':88,'张云':70,'赵文':60,'李强':90}>>>score_g2={'陈娟':90,'刘丽':85,'张云':75}>>>score_g1.update(score_g2)>>>score_g1{'王芳':88,'张云':75,'赵文':60,'李强':90,'陈娟':90,'刘丽':85}>>>score_g2{'陈娟':90,'刘丽':85,'张云':75}使用|操作(只在Python3.9和更高版本中支持)>>>score=score_g1|score_g2>>>score{'王芳':88,'张云':75,'赵文':60,'李强':90,'陈娟':90,'刘丽':85}对字典整体的操作-删除或清空del命令和clear()方法>>>score_g1_=score_g1>>>delscore_g1>>>score_g1Traceback(mostrecentcalllast):….NameError:name'score_g1'isnotdefined.>>>score_g1_{'王芳':80,'张云':70,'赵文':60,'李强':90,'陈娟':90,'刘丽':87}>>>score_g1_.clear()>>>score_g1_{}对字典整体的操作-字典的解包操作在函数调用中,可以借助字典类型将多个参数构成的字典解包传递给函数。键应当对应函数定义中的相应参数名称,并为字符串类型。>>>defgreet(name,greeting):….print(f"{greeting},{name}!")>>>personal_info={'name':'王芳','greeting':'早上好'}>>>greet(**personal_info)早上好,王芳!实例6-3处理用户注册请求假设我们正在开发一个用户注册系统,需要编写一个register_user()函数来处理用户的注册请求。这个函数需要接收一些基本的用户信息,如用户名(username)和密码(password)(未来可能还需要接收其他可选信息,如电子邮件、年龄等),对用户名和密码进行基本的非空检查,然后将用户注册信息存入数据库。请设计实现该函数。实例6-3处理用户注册请求参考代码6-36-3.py1
defregister_user(username,password,**kwargs):2
#定义一个函数模拟将用户信息保存到数据库3
defsave_to_database(user_info):4
print(f"Savinguserinfo:{user_info}")
5
ifnotusernameornotpassword:6
return"用户名和密码不能为空"7
#创建一个包含用户注册信息的字典8
user_info={9
'username':username,10
'password':password#注意:在实际应用中,密码应该进行加密处理实例6-3处理用户注册请求参考代码6-36-3.py11
}12
user_info.update(kwargs)#更新user_info字典,包含所有通过kwargs传递的额外信息13
save_to_database(user_info)#保存用户注册信息到数据库14
return"注册成功"#返回注册成功消息15
#使用示例16
other_info={'email':"user123@",'age':30}17
result=register_user("user123","password123",**other_info)18
print(result)实例6-3处理用户注册请求运行结果输出Savinguserinfo:{'username':'user123','password':'password123','email':"user123@",'age':30}注册成功02集合set类型数据由一系列互不相同的不可变数据对象构成,成员对象是无序的,同时set类型自身又是可变数据类型。利用其成员的非重复性。set常用于进行容器数据去重操作。集合初步基本概念{elem1,elem2,…}语法创建集合通过常量赋值或者BIF函数set()创建>>>courses1={'语文','数学','英语','语文'}>>>courses2=set(['语文','物理','化学'])>>>courses1,courses2({'语文','数学','英语'},{'语文','物理','化学'})>>>isinstance(courses1,set),isinstance(courses2,set)(True,True)>>>set1={1,2,3}>>>set1{1,2,3}>>>set2={[1,2],[3,4]}Traceback(mostrecentcalllast):……TypeError:unhashabletype:'list'空集的创建>>>s=set()>>>sset()对集合成员的操作成员关系判断>>>courses1={'语文','数学','英语'}>>>'语文'incourse1True>>>'物理'incourse1False对集合成员的操作添加、删除集合成员基本语法功能示例add(elem)增加成员elem>>>courses1={'语文','数学','英语'}>>>courses1.add('物理')>>>'物理'incourses1Trueremove(elem)删除成员elem,如果elem不在集合中,解释器会报错>>>courses1.remove('语文')>>>courses1.remove('语文')Traceback(mostrecentcalllast):……KeyError:'语文'discard(elem)如果elem在集合中,则删除它,否则无操作。>>>courses1={'语文','数学','英语'}>>>courses1.discard('物理')>>>courses1.discard('语文')>>>courses1{'数学','英语'}pop()从集合中任意返回一个成员,如果集合为空,则报错。>>>courses1={'语文','数学','英语'}>>>c=courses1.pop()>>>c'数学'>>>set().pop()Traceback(mostrecentcalllast):……KeyError:'popfromanemptyset'clear()清空集合。>>>courses1={'语文','数学','英语'}>>>courses1.clear()>>>courses1set()集合之间的操作集合间的运算基本语法功能示例运算符|计算两个或多个集合的并集>>>s1={1,2}>>>s2={2,3}>>>s_u1=s1|s2>>>s_u2=s1.union(s2)>>>s_u1,s_u2({1,2,3},{1,2,3})方法union(*others)运算符&计算两个或多个集合的交集>>>s1={1,2}>>>s2={2,3}>>>s_i1=s1&s2>>>s_i2=ersection(s2)>>>s_i1,s_i2({2},{2})方法intersection(*others)运算符-计算两个或多个集合的差>>>s1={1,2}>>>s2={2,3}>>>s_d1=s1-s2>>>s_d2=s1.difference(s2)>>>s_d1,s_d2({1},{1})方法difference(*others)运算符^计算两个集合的对称差>>>s1={1,2}>>>s2={2,3}>>>s_sd1=s1^s2>>>s_sd2=s1.symmetric_difference(s2)>>>s_sd1,s_sd2({1,3},{1,3})方法symmetric_difference(other)集合之间的操作集合间的关系测试基本语法功能示例方法isdisjoint(other)判断两个集合是否不相交,不相交则返回True,否则返回False。>>>{1,2}.isdisjoint({2,3})False>>>{1,2}.isdisjoint({3,4})True运算符<和>判断两个集合是否存在真子集关系,是则返回True,否则返回False。>>>{1,2}>{2}True>>>{1,2}<{2}False方法issubset(other)判断两个集合是否存在子集关系,是则返回True,否则返回False。>>>{1,2}.issubset({1,2})True>>>{1}.issubset({1,2})True>>>{1,2}.issubset({2})False运算符>=和<=实例6-4用户兴趣标签分析电商平台通常会根据用户的浏览、购买历史等为用户打上兴趣标签。假设用户兴趣标签以类似{'科技','旅行','摄影'}这样的集合形式给出,请编写一个函数,输入两个用户的兴趣标签,实现以下分析:计算并输出共同的兴趣计算并输出各自独特的兴趣如果两者兴趣完全不同,输出提示“两用户无共同兴趣。”如果一个用户的兴趣涵盖了另一个用户,输出提示“两个用户兴趣相似。”实例6-4用户兴趣标签分析参考代码6-46-4.py1
defanalyze_user_interests(user1_interests,user2_interests):2
#按特定格式打印集合,增加输出的可读性3
defset_to_str(s):4
return'、'.join(list(s))5
#(1)计算并输出共同的兴趣6
common_interests=user1_interests&user2_interests7
iflen(common_interests):8
print(f"共同的兴趣:{set_to_str(common_interests)}")9
#(2)计算并输出各自独特的兴趣10
unique_to_user1=user1_interests.difference(user2_interests)11
unique_to_user2=user2_interests.difference(user1_interests)12
iflen(unique_to_user1):13
print(f"用户1独特的兴趣:{set_to_str(unique_to_user1)}")14
iflen(unique_to_user2):15
print(f"用户2独特的兴趣:{set_to_str(unique_to_user2)}")16
#(3)如果两者兴趣完全不同,输出提示17
ifuser1_interests.isdisjoint(user2_interests):18
print("两用户无共同兴趣。")19
#(4)如果一个用户的兴趣涵盖了另一个用户,输出提示20
ifuser1_interests.issubset(user2_interests)oruser2_interests.issubset(user1_interests):21
print("两个用户兴趣相似。")22
#测试23
analyze_user_interests({'科技','旅行','摄影'},{'旅行','摄影'})实例6-4用户兴趣标签分析运行结果输出共同的兴趣:旅行、摄影用户1独特的兴趣:科技两个用户兴趣相似。03综合实例:文学作品赏析综合实例
文学作品赏析在英国,19世纪,随着工业革命的深入和资本主义的发展,社会矛盾日益尖锐,现实主义文学应运而生。这一文学流派强调客观、真实地描绘现实生活,批判社会弊病。其中若干经典小说在世界范围内都广受读者喜爱,如查尔斯·狄更斯的《双城记》、威廉·梅克比斯·萨克雷的《名利场》、以及勃朗特姐妹的《简
爱》和《呼啸山庄》等。通过统计分析这几部经典小说各自的词汇量和词频,尝试对它们各自的创作特点进行初步的分析解读。可以通过互联网公开免费下载,也可以从本书附带的电子资源中获取为了便于后续文本分析处理,将它们都转换为了UTF-8编码的纯文本文件。删除前言、目录等一些附属信息综合实例
文学作品赏析1.文件获取和初步分析综合实例
文学作品赏析2.文件内容读取1
defload_text(file_path):2
"""加载文件内容"""3
withopen(file_path,'r',encoding='utf-8')asfile:4
text=file.read()5
returntext综合实例
文学作品赏析3.文本预处理文本中的标点符号和大小写字母可能干扰我们的词频统计1
defpreprocess_text(text):2
"""预处理文本:转换为小写,将标点符号替换为空格"""3
text_cleaned=""4
forcharintext:5
ifcharinstring.punctuation:6
text_cleaned+=""7
else:8
text_cleaned+=char9
text_lower=text_cleaned.lower()10
returntext_lower综合实例
文学作品赏析4.分词直接利用字符串的split()方法。该方法默认使用空白字符(包括空格、制表符、换行符等)作为分割字符串的分隔符。1
defsplit_into_words(text):2
"""分词:将文本分割成单词列表"""3
words=text.split()4
returnwords综合实例
文学作品赏析5.统计词频使用字典存储统计结果是比较直观的选择。这里可以使用单词作为字典的键,该单词出现的频率作为值。1
defcount_word_frequencies(words):2
"""统计词频,并按照词频从高到低排序"""3
word_counts={}4
forwordinwords:5
ifwordinword_counts:6
word_counts[word]+=17
else:8
word_counts[word]=19
word_counts=word_counts.items()10
word_counts=sorted(word_counts,key=lambdax:x[1],reverse=True)11
returnword_counts综合实例
文学作品赏析6.格式化打印输出并观察分析通过定义主函数main()依次调用前述各个函数,并将最终的统计结果中出现频率前20的词和词频打印输出。1
defmain(file_path):2
text=load_text(file_path)3
preprocessed_text=preprocess_text(text)4
words=split_into_words(preprocessed_text)5
word_frequencies=count_word_frequencies(words)6
#输出结果,这里只打印前20个最常见的单词及其频率7
print(f"{'Word':<20}{'Frequency'}")8
forword,freqinword_frequencies[:20]:9
print(f"{word:<20}{freq}")综合实例
文学作品赏析6.格式化打印输出并观察分析对《双城记》的分词输出结果结果如表,排名前20的高频词基本都是一些英语中的停用词(stopword),如介词、连词、冠词等,它们对于文本的整体含义分析贡献不大。WordFrequencythe8024and4999of4007to3569a2944in2599it2067his2011i1987that1941he1857was1773you1427with1311had1306as1163her1045at1033him976for960综合实例
文学作品赏析7.优化处理过程:排除停用词英语中停用词列表通常可以从一些第三方工具包(如NLTK)中获取。1
defexclude_stop_words(words):2
“”“去除英文停用词”“”3
stop_words={‘yourselves’,‘does’,‘i’,‘m’,‘mightn’,‘shan’,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 绿色投资组合构建及风险管理研究
- 2026 年急救物品完好率护理质控管理课件
- 水闸工程标准化检查清单模板
- 一级建造师考试(公共课程)题库含答案(湖北省潜江市2025年)
- 校园球类社团指导题库(含答案)
- 微观经济学题库(含答案)
- 汽车维修工五级理论知识测试题及答案
- 金融学《微观经济学》试题及答案
- 2026乡村全科执业助理医师完整试题及答案
- 2026年校园安防岗位考试题库及答案
- 外墙外保温系统修复技术标准 DG-TJ08-2310-2019
- 土木工程师(水利水电)《专业案例》近年考试真题(200题)
- 机械制图机械制图基础知识课件
- 《光伏发电工程可行性研究报告编制规程》(NB/T32043-201)中文版
- 校长培训精美课件
- 商场招商策略报告
- 大班思维训练等量代换课件
- 滁州市珠龙广卫绢云母粉厂滁州市南谯区将军山绢云母矿1万吨-年露天采矿工程项目环境影响报告书
- 2019基于谱分析的船体结构疲劳强度评估指南
- 骨锚修复舟月韧带
- 偏瘫患者的转移训练
评论
0/150
提交评论