在使用python原生的数据结构dict的时候,如果d[key]这样的方式访问,当指定的key不存在时,会抛出keyError异常。但是如果使用defaultdict(导入collections),只要你传入一个默认的工厂方法,那么请求一个不存在的key时,便会调用这个工厂方法使用其结果来作为这个key的默认值。
defaultdict在使用的时候需要传一个工厂函数(function_factory),来构建一个类似dict的对象,该对象具有默认值,默认值通过调用工厂函数生成。比如工厂函数用的list,默认值就是[]
举例说明:
统计一个文件中每个单词出现的次数。

常见逻辑写法

d = {}
with open(‘xxx.txt’) as f:
for line iin fin:
for word in line,strip():
if word not in d:
d[word] = 1
else:
d[word] += 1

使用defaultdict

from collections import defaultdict
d = defaultdict(int)
with open(‘xxx.txt’) as f:
for line iin fin:
for word in line,strip():
d[word] += 1

使用setdefault, 我们知道defaultdict() 的用法和dict.setdefault(key,[])比较类似。

d = {}
with open(‘xxx.txt’) as fin:
for line iin fin:
for word in line.strip():
d[word] = d.setdefault(word,0) + 1

使用Counter

from collections import Counter
word_counrs = Counter()
with open(‘xxx.txt’) as fin:
for line in fin:
word_counrs.update(line.strip())

如果输出出现次数最多的前三位,我们或许会这样写:

result = sorted(result.items(), key = lambda d:d[1],reverse = True)[:3]

但是使用Counter就简单了:

result = word_counrs.most_common(3)

defaultdict & Counter的更多相关文章

  1. python 全栈开发,Day27(复习, defaultdict,Counter,时间模块,random模块,sys模块)

    一.复习 看下面一段代码,假如运行结果有问题,那么就需要在每一步计算时,打印一下结果 b = 1 c = 2 d = 3 a = b+c print(a) e = a + d print(e) 执行输 ...

  2. Python【8】-分析json文件

    一.本节用到的基础知识 1.逐行读取文件 for line in open('E:\Demo\python\json.txt'): print line 2.解析json字符串 Python中有一些内 ...

  3. python--------------常用模块之正则

    一.认识模块  什么是模块:一个模块就是一个包含了python定义和声明的文件,文件名就是加上.py的后缀,但其实import加载的模块分为四个通用类别 : 1.使用python编写的代码(.py文件 ...

  4. Python统计词频的几种方式

    语料 text = """My fellow citizens: I stand here today humbled by the task before us, gr ...

  5. day20 python常用模块

    认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀.     但其实import加载的模块分为四个通用类别: 1 使用pytho ...

  6. 新学了几个python模块,不是很鸡肋。

    先说一个模块分类(基本上所有模块都是小写开头,虽然规范的写法是变量的命名规范,但是,都是这样写的) 1,C编写并镶嵌到python解释器中的内置模块 2,包好的一组模块的包 3.已经被编译好的共享库, ...

  7. 常用模块Part(1)

    collections模块 time模块 random模块 os模块 sys模块 collections模块 这个模块实现了一些很好的数据结构,它们能帮助你解决各种实际问题 在这里主要介绍几种数据结构 ...

  8. 正则表达式 re sys os random time 模块

    今天学习内容如下: 1.正则表达式 百度正则表达式在线测试,可以练习 正则表达式本身也和python没有什么关系,就是匹配字符串内容的一种规则.官方定义:正则表达式是对字符串操作的一种逻辑公式,就是用 ...

  9. Python之容器类Collections

    容器类Collections 标签(空格分隔): Python进阶 defaultdict counter deque namedtuple defaultdict defaultdict的作用是可以 ...

随机推荐

  1. 在Intellij上面导入项目 & AOP示例项目 & AspectJ学习 & Spring AoP学习

    为了学习这篇文章里面下载的代码:http://www.cnblogs.com/charlesblc/p/6083687.html 需要用Intellij导入一个已有工程.源文件原始内容也可见:link ...

  2. Android HandlerThread 消息循环机制之源代码解析

    关于 HandlerThread 这个类.可能有些人眼睛一瞟,手指放在键盘上,然后就是一阵狂敲.立即就能敲出一段段华丽的代码: HandlerThread handlerThread = new Ha ...

  3. iOS UI08_tableView省市区字典数组

    北京 1 北京市 1 西城区 1 东城区 2 崇文区 3 宣武区 4 朝阳区 5 丰台区 6 石景山区 7 海淀区 8 门头沟区 9 房山区 10 通州区 11 顺义区 12 昌平区 13 大兴区 1 ...

  4. 整理自Git文件夹下资料及man手册(不包括书籍)

    $ git commit -awhich will automatically notice any modified (but not new) files, add them to the ind ...

  5. 牛顿迭代法(Newton's Method)

    牛顿迭代法(简称牛顿法)由英国著名的数学家牛顿爵士最早提出.可是,这 一方法在牛顿生前并未公开发表(讨厌的数学家们还是鼓捣出来了) 牛顿法的作用是使用迭代的方法来求解函数方程的根. 简单地说,牛顿法就 ...

  6. Docker在centos下安装以及常见错误解决

    系列目录 Docker安装(使用阿里云镜像) Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE. 社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收 ...

  7. windows下gVim 中文显示为乱码

    打开vimrc文件,在vim的安装目录下可以找到该文件: 或在windows下是在vim/gvim下输入:edit $vim/_vimrc. 在文件的末尾添加一句 "set fileenco ...

  8. linux的DNS相关介绍(转载)

    1.DNS配置文件 /etc/hosts   这个是最早的 hostname 对应 IP 的档案: /etc/resolv.conf :这个重要!就是 ISP 的 DNS 服务器 IP 记录处: /e ...

  9. 数据挖掘项目之---通过对web日志的挖掘来实现内容推荐系统

    先说一说问题,不知道大家有没有这样的经验,反正我是经常碰到. 举例1,某些网站每隔几天就发邮件给我,每次发的邮件内容都是一些我根本不感兴趣的东西,我不甚其扰,对其深恶痛绝.         举例2,添 ...

  10. iOS开发之──传感器使用

    本文转载至 http://mobile.51cto.com/iphone-423219.htm 在实际的应用开发中,会用到传感器,下面首先介绍一下iphone4的传感器,然后对一些传感器的开发的API ...