Python标准库collections中与字典有关的类

Python标准库中提供了很多扩展功能,大幅度提高了开发效率。这里主要介绍OrderedDict类、defaultdict类和Counter类。

(1)OrderedDict类

Python内置字典dict是无序的,如果需要一个可以记住元素插入顺序的字典,可以使用collections.OrderedDict。例如:

>>> import collections

>>> x = collections.OrderedDict() #有序字典

>>> x['a'] = 3

>>> x['b'] = 5

>>> x['c'] = 8

>>> x

OrderedDict([('a', 3), ('b', 5), ('c', 8)])

(2)defaultdict类

使用collections模块的defaultdict类来统计字符出现频次。

>>> import string

>>> import random

>>> x = string.ascii_letters + string.digits + string.punctuation

>>> y = [random.choice(x) for i in range(1000)]

>>> z = ''.join(y)

>>> from collections import defaultdict

>>> frequences = defaultdict(int) #所有值默认为0

>>> frequences

defaultdict(<class 'int'>, {})

>>> for item in z:

frequences[item] += 1 #修改每个字符的频次

>>> frequences.items()

创建defaultdict对象时,传递的参数表示表示字典中值的类型,除了上面代码演示的int类型,还可以是任意合法的Python类型。

>>> from collections import defaultdict

>>> games = defaultdict(list) #使用list作为值类型

>>> games #所有值默认为空列表

defaultdict(<class 'list'>, {})

>>> games['name'].append('dong') #可直接为字典games添加元素

>>> games['name'].append('zhang')

>>> games['score'].append(90)

>>> games['score'].append(93)

>>> games

defaultdict(<class 'list'>, {'score': [90, 93], 'name': ['dong', 'zhang']})

(3)Counter类

对于频次统计的问题,使用collections模块的Counter类可以更加快速地实现这个功能,并且能够提供更多的功能,例如查找出现次数最多的元素。

>>> from collections import Counter

>>> frequences = Counter(z) #这里的z还是前面代码中的字符串对象

>>> frequences.items()

>>> frequences.most_common(1) #返回出现次数最多的1个字符及其频率

>>> frequences.most_common(3) #返回出现次数最多的前3个字符及其频率

原文发布于微信公众号 - Python小屋(Python_xiaowu)

原文发表时间:2016-12-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java学习网

Java中有关Null的9问题

Java中有关Null的9问题 对于Java程序员来说,null是令人头痛的东西。时常会受到空指针异常(NPE)的骚扰。连Java的发明者都承认...

2215
来自专栏大数据和云计算技术

由快速排序到分治思想

算法是基础,小蓝同学准备些总结一系列算法分享给大家,这是第一篇《由快速排序到分治思想》,非常赞!希望对大家有帮助,大家会喜欢! 快速排序是一种基于分治思想...

3476
来自专栏noteless

[五]java函数式编程归约reduce概念原理 stream reduce方法详解 reduce三个参数的reduce方法如何使用

java8 流相关的操作中,我们把它理解 "累加器",之所以加引号是因为他并不仅仅是加法

2643
来自专栏带你撸出一手好代码

Java元组的使用

元组在计算机领域有着特殊的意义,这个名字听起来似乎有些陌生, 平时在写代码也基本没什么应用场景, 然而, 出人意料的是, 元组跟程序设计密切相关, 可能有的同学...

4728
来自专栏开源优测

Python3希尔排序

希尔排序 概述 希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminshing Increment Sort),是直接插入排序算...

35110
来自专栏诸葛青云的专栏

一步一步教你从零开始写C语言链表——构建一个链表

今天小编给大家带来c语言难点--链表的讲解,一步一步教你从零开始写C语言链表---构建一个链表。

1070
来自专栏java一日一条

Java中有关Null的9件事

对于Java程序员来说,null是令人头痛的东西。时常会受到空指针异常(NPE)的骚扰。连Java的发明者都承认这是他的一项巨大失误。Java为什么要保留nul...

622
来自专栏用户画像

7.5.2 基数排序

基数排序是一种很特别的排序方法,它不是基于比较进行排序的,而是采用多关键字排序思想,借助“分配”和“收集”两种操作对单逻辑关键字进行排序。基数排序又分为最高位优...

803
来自专栏醒者呆

融会贯通——深入了解面向对象设计原则“依赖倒转原则”

一千个人眼里有一千个哈姆雷特,下面我尝试用深入浅出的语言贯穿到“控制反转”,“依赖注入”,“面向抽象编程”,以及“面向接口编程”这几个概念。 传递参数,关联(组...

3427
来自专栏我就是马云飞

设计模式二十四章经之工厂模式

1222

扫码关注云+社区

领取腾讯云代金券