学习网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 43394|回复: 0
收起左侧

高级语言程序设计(Python) - 哈尔滨工业大学-7.1.2 视频2

[复制链接]
发表于 1-25 20:22 | 显示全部楼层 |阅读模式
好下面我们再看一个更加实际的例子就是读取一个小说小说呢存放在emma.txt
这个文件里面接着呢打印前10个最常见的单词在此我们是否能够像上面的方案二一样将每个单词都转化成相应的数字其实这样做是非常繁琐的因此呢我们使用方案三也就是用字典的方法来实现下面我们就来实际的编写一下这个程序在编写程序之前我们首先来看一下emma.txt
也就是这个小说的内容我们可以看到这个就是这个小说的内容他是有很多的单词构成的每一个单词之间呢都用一个空格进行分割好下面我们就来编写程序来实际的解决一下这个问题首先呢我们要读取这个小说的内容当然使用文件的读取方式即f = open然后emma.txt
就是这个文件的名字接着就可以循环了for iine in f:然后pass最后呢f我们可close掉好下面我们就来实现最基本的功能第一步呢我们要有一个字典假如说这个字典叫做word_freq初始化为空那么当读一行的时候我们使用如下的方法将这一行的单词呢切分开即line.strip()接着呢再split即将一行的文本根据空格切分成若干的单词然后我们for word in words即枚举其中的每一个单词然后判断如果wordin word_freq个字典里面那么我们就可以word_freq这个字典键呢是word值呢是这个单词对应出现的次数就可以加一else也就是说这个单词第一次出现那么就是word_freq[word]托被置成一这个和上面统计字母出现的次数是一样的当所有的循环执行结束之后word_freq它这个字典呢就存着每一个单词对应的次数但是这个问题呢是要求我们输出前10个最常见的单词那么如何来解决这个问题呢这样我们还需要生成一个列表这个列表中的每个元素是每一个单词和它对应的出现的次数构成的这样一个元组那么这个列表我们可以命名成freq_word初始值为空接着我们需要枚举字典中的每一个单词和这个单词出现的次数即word,freq in word_freq这个字典其中的items接着呢我们需要向freq_word这个列表中append一个元素它的元素的内容是(freq,word)循环结束之后我们就生成了这样一个freq和word的对应的字典然后呢再对freq,word进行排序最后我们再输出前10个也就是说for freq,word in freq_word[:10]前10个呢就是冒号十然后print其中的每一个单词好程序写完了我们实际的执行一下当然我们可以看到其实输出地呢并不是10个最常见的单词而输出的十个最不常见的单词这是什么原因造成的呢是因为在sort的时候它默认的情况是按照升序进行排序的当然我们需要按照从大到小的顺序因此呢在这需要用到reverse把它置成true这样即按照从大到小的顺序进行排序好再执行下这个程序那么这就是10个最常见的单词即to,the,and ,of等等这个呢和我们直观的印象也是一样的即这些虚词出现的次数是非常多的好下面我们再来看一个翻转字典的例子也就是生成一个新的字典其中的键呢是原来字典的值而值是原来字典的键那有些同学会说这很简单只要我们便利一下字典中的所有的键值对然后将键置成值值置成键不就可以了吗当然其中我们需要注意一点就是在原来的字典中键是不能够重复的但是值呢有可能重复也就是生成的一个新字典他的键呢就可能对应多个值那么如何来存储这些多个值呢就需要用到列表的方式我们实际的来写一下这个程序假设我们有一个字典叫做d1它的值呢它存储如下的键值对比如张这个同学他住的房间号呢叫做123而王呢房间号可能是456那我们又有一同学叫做李他和张是同寝的也就是他也住在123然后呢还有一个叫做赵他和王是同寝的住在456那我们希望知道住在123这个房间中都有哪些同学住在456这个房间中都有哪些同学呢那我们希望生成一个字典叫做d2初始值为空接着呢我们就可以遍历原来的d1,for name,room ind1.items然后我们需要判断if room in d2:这时候我们需要将d2的room由于它是一个列表这时候我们就可以append name,else如果不在的话d2的room就生成一个列表他呢内容叫做name也是这位表中只有一个同学的名字最后我们print他一下d2看一下现在的结果通过这个结果我们可以看到住在456这个房间中的呢赵和王而住在123这个房间中的是李和张正是我们所期望的一个结果[此为课程内容大纲,相关资源下载地址请在论坛搜索标题名称]

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|小黑屋|学习资源网 ( 粤ICP备16100991号-2 )

GMT+8, 12-4 19:56 , Processed in 0.129546 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc. Template By ¡¾Î´À´¿Æ¼¼¡¿¡¾ www.wekei.cn ¡¿

快速回复 返回顶部 返回列表