python常见模块之collections模块

一、模块简介

在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。

1.namedtuple: 生成可以使用名字来访问元素内容的tuple

2.deque: 双端队列,可以快速的从另外一侧追加和推出对象

3.Counter: 计数器,主要用来计数

4.OrderedDict: 有序字典

5.defaultdict: 带有默认值的字典

二、模块主要功能

1.namedtuple: 生成可以使用名字来访问元素内容的tuple

1 from collections import namedtuple
2 Tup = namedtuple('name','x,y')
3 t1 = Tup(1,2)
4 print(t1)           # name(x=1, y=2)
5 print(t1.x)         # 1
6 print(t1.y)         # 2

注意:(queue不是collections模块里的,在deque之前我们先来看一下queue) queue: 队列,里面可以存着好多值,只能往里面放值或者往外拿出,不能修改不能查看,而且先拿出的一定是最先放进去的

 1 import queue
 2 
 3 q = queue.Queue()
 4 q.put(10)
 5 q.put(5)
 6 q.put(6)
 7 
 8 print(q.get())
 9 print(q.get())
10 print(q.get())

2.deque: 双端队列,可以快速的从另外一侧追加和推出对象

1 from collections import deque
2 q = deque()
3 q.append(1)#从后端插入值
4 q.appendleft(2)#从前面插入值
5 q.insert(1,4) #在指定索引位置插入值
6 q.pop()#从后往前取值
7 q.popleft()#从前面取值

3.OrderedDict: 有序字典

python中常规字典是无序的,每次查看位置都会不一样,而如果需要创建一个有序的字典就要用OrderedDict了。 需要注意的是,OrderedDict虽然有序,但是也不能通过下标索引来找到元素

1 from collections import OrderedDict
2 dic = OrderedDict([('k1',1),('k2',2),('k3',3)])
3 print(dic)  #OrderedDict([('k1', 1), ('k2', 2), ('k3', 3)])
4 print(dic['k2']) #2
5 for i in dic:
6     print(i)
7 # k1
8 # k2
9 # k3

4.defaultdict: 带有默认值的字典

可以为字典指定一个默认值,默认值可以是列表,字典等一切可以被调用的对象

1 from collections import defaultdict
2 dic1 = defaultdict(list) #创建一个字典,每个键所对应的值都是一个列表
3 print(dic1['k1'])
4 dic2 = defaultdict(dict) #创建一个字典,每个键所对应的值都是一个字典
5 print(dic2['k1'])
6 dic3 = defaultdict(lambda:5) #创建一个字典,每个键所对应的值都是5 (不能直接写5,因为括号内是能被调用的)
7 print(dic2['k1'])

三、应用实例

# 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。 # 即: {'k1': 大于66 , 'k2': 小于66}

1 from collections import defaultdict
2 l = [11,22,33,44,55,66,77,88,99,90]
3 dic = defaultdict(list)
4 for i in l:
5     if i>66:
6         dic['k1'].append(i)
7     elif i<66:
8         dic['k2'].append(i)
9 print(dic)  #defaultdict(<class 'list'>, {'k1': [77, 88, 99, 90], 'k2': [11, 22, 33, 44, 55]})

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏老马说编程

计算机程序的思维逻辑 (6) - 如何从乱码中恢复 (上)?

我们在处理文件、浏览网页、编写程序时,时不时会碰到乱码的情况。乱码几乎总是令人心烦,让人困惑。希望通过本节和下节文章,你可以自信从容地面对乱码,恢复乱码。 谈...

23350
来自专栏冰霜之地

JavaScript 新手的踩坑日记

在1995年5月,Eich 大神在10天内就写出了第一个脚本语言的版本,JavaScript 的第一个代号是 Mocha,Marc Andreesen 起的这个...

10420
来自专栏前端新视界

立即执行函数表达式(IIFE)

原文:immediately-invoked-function-expression 译者:nzbin 也许你还没有注意到,我是一个对术语比较坚持的人。因此...

22150
来自专栏黑泽君的专栏

【Java面试复习经典】传智播客Java就业班入学测试题及答案解析(2012年版)

  共50道题,每道题2分,总分100分,80分为合格。   注意,题目有多选,也有单选。请认真作答。

19430
来自专栏余林丰

Java中net.sf.json包关于JSON与对象互转的坑

  在Web开发过程中离不开数据的交互,这就需要规定交互数据的相关格式,以便数据在客户端与服务器之间进行传递。数据的格式通常有2种:1、xml;2、JSON。通...

42950
来自专栏Jimoer

数据结构:数组、链表、栈、队列的理解

解释定义 数据结构: 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。再简单描述一下:数据结构就是描述对象间逻辑关系的学科。 如果还是不太清楚下面会...

525100
来自专栏老马说编程

(92) 函数式数据处理 (上) / 计算机程序的思维逻辑

上节我们介绍了Lambda表达式和函数式接口,本节探讨它们的应用,函数式数据处理,针对常见的集合数据处理,Java 8引入了一套新的类库,位于包java.uti...

19860
来自专栏猿人谷

Effective c++ 小结

最近又重新看了Effective C+,不过到现在还是有好多地方不懂的,先记下笔记,待用的时候再细细琢磨。 条款1:尽量用const和inline而不用#def...

20350
来自专栏xx_Cc的学习总结专栏

iOS底层原理总结 - 探寻Runtime本质(二)

28220
来自专栏PHP实战技术

PHP常用正则表达式大全

  匹配数字   "^\d+$" //非负整数(正整数 + 0)   "^[0-9]*[1-9][0-9]*$" //正整数   "^((-\d+)|(0+))...

57780

扫码关注云+社区

领取腾讯云代金券