[编程经验] Python之collections模块

collections模块是一个不用不知道,一用就上瘾的模块。因为它提供了几种非常方便的数据结构和方法,在有些情况下特别好用。今天给大家总结一下其中的OrderDict和Counter两个方法,在平时我经常用的方法,希望你也能喜欢它。然后还有比如deque,namedtuple,defaultdict等也是很有的方法,了解了以后重点是熟练的使用,灵活的应用到你的具体任务中,是需要掌握的。

1. OrderDict

# Example 1
dict_1 = dict()
dict_1['A'] = "I love machine learning".split(" ")
dict_1['B'] = "I love life too".split(" ")
dict_1['C'] = "which you like and which you like".split(" ")
print("先输出字典:{}".format(dict_1))
for x, y in dict_1.items():
    print("然后遍历字典:{}".format((x, y)))
print("dict_1 的类型: {}".format(type(dict_1)))

"""
先输出字典:{'B': ['I', 'love', 'life', 'too'], 'C': ['which', 'you', 'like', 'and', 'which', 'you', 'like'], 'A': ['I', 'love', 'machine', 'learning']}
然后遍历字典:('B', ['I', 'love', 'life', 'too'])
然后遍历字典:('C', ['which', 'you', 'like', 'and', 'which', 'you', 'like'])
然后遍历字典:('A', ['I', 'love', 'machine', 'learning'])
dict_1 的类型: <class 'dict'>
"""

多次执行上面这个程序,你会发现每次输出的顺序都是不一样的,这就是字典的无序性。

from collections import OrderedDict

dict_2 = OrderedDict()

dict_2['A'] = list("machine")
dict_2['B'] = list("learning")
dict_2['C'] = list("math")
print("先输出字典:{}".format(dict_2))

for k, v in dict_2.items():
    print("然后遍历字典:{}".format((k, v)))
print("dict_2 的类型: {}".format(type(dict_2)))
"""
先输出字典:OrderedDict([('A', ['m', 'a', 'c', 'h', 'i', 'n', 'e']), ('B', ['l', 'e', 'a', 'r', 'n', 'i', 'n', 'g']), ('C', ['m', 'a', 't', 'h'])])
然后遍历字典:('A', ['m', 'a', 'c', 'h', 'i', 'n', 'e'])
然后遍历字典:('B', ['l', 'e', 'a', 'r', 'n', 'i', 'n', 'g'])
然后遍历字典:('C', ['m', 'a', 't', 'h'])
dict_2 的类型: <class 'collections.OrderedDict'> 
"""

多次执行上面这个程序,你会发现每次输出的key都是按照A, B, C顺序输出的。

2. Counter

Counter 是一个统计方法,可以统计频率,比如词频等。看个栗子

# Example 2
from collections import Counter

list_1 = list("machine learning and math")

fre = Counter(list_1)
print(fre)
"""
Counter({'n': 4, 'a': 4, ' ': 3, 'm': 2, 'e': 2, 'i': 2, 'h': 2, 'l': 1, 'c': 1, 'g': 1, 't': 1, 'd': 1, 'r': 1})
"""
for f, v in fre.most_common(n=5):
    print("出现次数最多的5个:{}".format((f, v)))
"""
出现次数最多的5个:('n', 4)
出现次数最多的5个:('a', 4)
出现次数最多的5个:(' ', 3)
出现次数最多的5个:('h', 2)
出现次数最多的5个:('e', 2)
"""

然后举个词频统计的小栗子

词频统计就是对于一段文本来说,首先做分词,分词之后统计每个词语出现的次数。今天用jieba分词来做一下,句子摘自朱自清的《荷塘月色》。

直接上代码

import jieba

test_str = "路上只我一个人,背着手踱着。这一片天地好像是我的;我也像超出了平常的自己," \
           "到了另一个世界里。我爱热闹,也爱冷静;爱群居,也爱独处。像今晚上,一个人在这" \
           "苍茫的月下,什么都可以想,什么都可以不想,便觉是个自由的人。白天里一定要做的事," \
           ",现 在都可不理。这是独处的妙处,我且受用这无边的荷香月色好了。"

test_str_cut = jieba.lcut(test_str)
word_freq = Counter(test_str_cut)
for w, f in word_freq.most_common(10):
    print(w, f)
"""
的 7
我 5
这 4
爱 4
了 3
也 3
一个 3
都 3
独处 2
"""

当然这里还可以去掉一些停用词等等操作。多练练就好了,都不难的,加油。

好,今天就到这里了~

原文发布于微信公众号 - 机器学习和数学(ML_And_Maths)

原文发表时间:2017-12-09

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

Python 算法实战系列:栈

学Python最简单的方法是什么?推荐阅读:Python开发工程师成长魔法 栈(stack)又称之为堆栈是一个特殊的有序表,其插入和删除操作都在栈顶进行操作,并...

3558
来自专栏菜鸟前端工程师

JavaScript学习笔记016-字符串方法0数组方法0值类型与引用型

782
来自专栏企鹅号快讯

【编程经验】Python之collections模块

collections模块是一个不用不知道,一用就上瘾的模块。因为它提供了几种非常方便的数据结构和方法,在有些情况下特别好用。今天给大家总结一下其中的Order...

1855
来自专栏好好学java的技术栈

Java提升篇:对象克隆(复制)

1563
来自专栏信数据得永生

JavaScript 编程精解 中文第三版 一、值,类型和运算符

3638
来自专栏web前端教室

5分钟学会javascript闭包(一)

先来定义,能读取其它函数内部变量的函数,它可以将函数内部和外部连接起来。 javascript有二种变量的作用域, 一是全局变量,二是局部变量 根据javasc...

1777
来自专栏用户画像

7.5.2 基数排序

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

803
来自专栏Java3y

插入排序就这么简单

插入排序就这么简单 从上面已经讲解了冒泡和选择排序了,本章主要讲解的是插入排序,希望大家看完能够理解并手写出插入排序的代码,然后就通过面试了!如果我写得有错误的...

4808
来自专栏GIS讲堂

面向对象思想

类:描述了具有相同特性(属性)和相同行为(操作方法)的对象。在程序中,类就是数据类型。

1254
来自专栏逸鹏说道

我为NET狂面试题-基础篇-答案

面向过程: 答案:图片只贴核心代码,完整代码请打开解决项目查看 (答案不唯一,官方答案只供参考,若有错误欢迎提出~) 99乘法表 https://githu...

35613

扫码关注云+社区

领取腾讯云代金券