python第三天(dictionary应用)转
1.题目:
python实现英文文章中出现单词频率的统计
前言:
这道题在实际应用场景中使用比较广泛,比如统计历年来四六级考试中出现的高频词汇,记得李笑来就利用他的编程技能出版过一本背单词的畅销书,就是根据词频来记单词,深受学生喜欢。这就是一个把编程技能用来解决实际问题的典型场景。另外,在数据分析时,那些词云效果本质上都是基于词频统计来调整字体的大小,如果你能熟练运用Python中的知识来解决问题的话,说明你真的入门Python了。
分析
本题主要考察以下几个方面的知识点:
1、如何正确读写文件
在python中读写文件可以使用内置函数open(),而 open 函数在python2 和 python3 中有一定的区别,比如 Python 中可以指定读写文件的编码格式,而 Python 则不可以,为了同时兼容2和3,我们通常会使用io模块下面的 open 函数,大家可以查文档搞清楚它们之间的区别,培养主动学习能力和查资料的习惯。
另外一点是读写文件完成之后是需要关闭文件描述符的,除了可以使用 try...except...finally的语法之后,我们还可以使用更优雅的 with … as 的语法来自动关闭文件。
2、如何对数据进行排序
sorted函数是一个使用频率很高的内置函数,它的用法也很强大,因为它可以通过指定参数 key 来进行自定义排序,也就意味着你不仅可以对数字排序、对字母排序、还可以对列表、字典、自定义的对象进行排序,你只需要要告诉 sorted 函数的排序规则是什么,比如一个people对象,我既可以根据年龄排序也可以根据身高体重来排序,所以这个函数时非常灵活的,另外,对于列表对象有自带的 sort 方法,如果能区分清楚 list.sort 与 sorted 之间区别那说明你已经能灵活运用了。
3、字典数据类型的运用
做词频统计,用字典无疑是最合适的数据类型,单词作为字典的key, 单词出现的次数作为字典的 value,很方便地就记录好了每个单词的频率,字典很像我们的电话本,每个名字关联一个电话号码。另外,字典最大的特点就是它的查询速度会非常快。理想情况下时间复杂度为O(1),我是说理想情况,如果你想深入了解字典的话,建议看看这篇文章 https://www.laurentluce.com/posts/python-dictionary-implementation/
4、正则表达式的运用
对文本、字符串处理,正则表达式简直是神器,无论是做数据爬虫还是数据清洗使用非常广泛,当然,正则表达式并不是Python特有的东西,所有编程语言都支持,我们要做的除了学习正则表达式还有他的API,只有熟悉了API我们才能运用到实际场景中去。关于正则表达式推荐一篇文章:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html ,另外我还发现有同学引入了jieba分词库,这个库在做中文分词非常有用,感兴趣的可以去了解一下。
本文的思路:
首先打开文件 ,对于文件的每一行进行词汇的统计,在这里需要注意 需要替换每一行中的单词之间的分隔符为空格,然后使用split()函数去掉空格,这样每一行剩下的就是纯粹的单词,然后遍历每一行中的每一个单词,将已经出现在字典中的单词,频次直接+1就行(这里需要用到字典中根据键来查找值的操作:dictionaryName[key]+=1)
由于很多时候我们只需显示出现频次最多的前多少条所以这里需要对频次进行排序,经过上一个步骤我们已经吧单词以及对应的频次存储在字典中,接下来使用items()函数和list(dictionaryName.items())把字典中的键值对构成列表,这一步之后可以转化为[(key1,value1),(key2,value2)….] ,这样就可以通过访问二位列表中元素的方法进行访问每个单词以及出现的频次了
# -*- coding: utf-8 -*-
def main():
file=open("C:\py\count_word.txt",'r')
wordCounts={}
count=10
for line in file:
lineprocess(line.lower(),wordCounts)
items0=list(wordCounts.items())
items=[[x,y] for (y,x) in items0]
items.sort()
for i in range(len(items)-1,len(items)-count-1,-1):
print(items[i][1]+"\t"+str(items[i][0]))
def lineprocess(line,wordCounts):
for ch in line:
if ch in '~@#%^()_-+=<>?/,.:;{}[]|\'"' :
line=line.replace(ch," ")
words=line.split()
print(words)
for word in words:
if word in wordCounts:
wordCounts[word]+=1
else:
wordCounts[word]=1

python第三天(dictionary应用)转的更多相关文章
- Python基础(三)——集合、有序 无序列表、函数、文件操作
1.Set集合 class set(object): """ set() -> new empty set object set(iterable) -> n ...
- 孤荷凌寒自学python第三十八天初识python的线程控制
孤荷凌寒自学python第三十八天初识python的线程控制 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.线程 在操作系统中存在着很多的可执行的应用程序,每个应用程序启动后,就可以看 ...
- 学习Python的三种境界
前言 王国维在<人间词话>中将读书分为了三种境界:"古今之成大事业.大学问者,必经过三种之境界:'昨夜西风凋碧树,独上高楼,望尽天涯路'.此第一境也.'衣带渐宽终不悔,为伊消得人 ...
- selenium webdriver (python) 第三版
感谢 感谢购买第二版的同学,谢谢你们对本人劳动成果的支持!也正是你们时常问我还出不出第三版了,也是你们的鼓励,让我继续学习整理本文档. 感谢乙醇前辈,第二版的文档是放在他的淘宝网站上卖的,感谢他的帮忙 ...
- Python第三天 序列 数据类型 数值 字符串 列表 元组 字典
Python第三天 序列 数据类型 数值 字符串 列表 元组 字典 数据类型数值字符串列表元组字典 序列序列:字符串.列表.元组序列的两个主要特点是索引操作符和切片操作符- 索引操作符让我 ...
- 简学Python第三章__函数式编程、递归、内置函数
#cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...
- 初学Python(三)——字典
初学Python(三)——字典 初学Python,主要整理一些学习到的知识点,这次是字典. #-*- coding:utf-8 -*- d = {1:"name",2:" ...
- Python第三天 序列 5种数据类型 数值 字符串 列表 元组 字典 各种数据类型的的xx重写xx表达式
Python第三天 序列 5种数据类型 数值 字符串 列表 元组 字典 各种数据类型的的xx重写xx表达式 目录 Pycharm使用技巧(转载) Python第一天 安装 shell ...
- python selenium 三种等待方式详解[转]
python selenium 三种等待方式详解 引言: 当你觉得你的定位没有问题,但是却直接报了元素不可见,那你就可以考虑是不是因为程序运行太快或者页面加载太慢造成了元素不可见,那就必须要加等待 ...
- python第三十一课--递归(2.遍历某个路径下面的所有内容)
需求:遍历某个路径下面的所有内容(文件和目录,多层级的) import os #自定义函数(递归函数):遍历目录层级(多级) def printDirs(path): dirs=os.listdir( ...
随机推荐
- oracle 基本语法(一)
1.基本语句: .查询每个部门工资最高的人的详细记录 select * from emp e,(select max(sal) max,deptno from emp group by deptno) ...
- 匿名union
#include <stdio.h> enum node_type{ t_int,t_double}; struct node{ enum node_type type; ...
- c语言描述的直接插入排序法
#include<stdio.h> #include<stdlib.h> #define SIZE 6 typedef int Type; //直接插入排序法 void Ins ...
- Struts2前期(这框架目前正处于淘汰状态)
Struts2第一天 Struts2的学习路线 1. Struts2的入门:主要是学习Struts2的开发流程(Struts2的开发流程.常见的配置.Action类的编写) 2. Struts2的Se ...
- ios学习路线—Objective-C(堆(heap)和栈(stack))
Objective-C的对象在内存中是以堆的方式分配空间的,并且堆内存是由你释放的,即release 栈由编译器管理自动释放的,在方法中(函数体)定义的变量通常是在栈内,因此如果你的变量要跨函数的话就 ...
- ABAP术语-Application
Application 原文:http://www.cnblogs.com/qiangsheng/archive/2007/12/15/995737.html Set of work processe ...
- 爬虫——urllib.request库的基本使用
所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地.在Python中有很多库可以用来抓取网页,我们先学习urllib.request.(在python2.x中为urllib2 ...
- unbuntu16初始化设置,并解决虚拟机操作系统窗口不能自适应问题
版本说明: 虚拟机:VMware Workstation 12.5.2 操作系统:ubuntu 16.04 unbuntu不同版本的下载链接:http://old-releases.ubuntu.co ...
- Apache Maven(四):依赖
依赖管理是Maven的特性之一,它是用户最为熟悉的特性之一,也是Maven擅长的领域之一.管理单个项目的依赖并没有太大困难,但是当您开始处理由数十或数百个模块组成的多模块项目和应用程序时,Maven可 ...
- C# Regex正则验证规则
using System; using System.Text.RegularExpressions; namespace MetarCommonSupport { /// <summary&g ...