collection模块:

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

1:namedtuple

生成可以使用名字来访问元素内容的元组(tuple)
例如:表示一个坐标
from collections import namedtuple
point = namedtuple('point',['x','y'])
p=point(1,2)
print(p.x)
print(p.y)

>>1
>>2

2:deque双端队列:

双端队列,可以快速的从另外一侧追加和推出对象。
使用list存储数据时,按索引访元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低

deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈

from collections import deque
q=deque(['a','b','c'])
q.append('x')
q.appendleft('y')
print(q)

>>deque(['y', 'a', 'b', 'c', 'x'])

3:Counter计数器

计数器,主要用来计数
目的是用来跟踪值出项的次数,它是一个无序的容器类型,以字典的键值对的形式存储,其中元素作为key,其计数作为value
计数值可以是任意的interger(包括0和负数),

创建:
from collections import Counter
#创建一个空的类
c=Counter()
#从一个可迭代对象中创建
c=Counter('gallahad')
#从一个字典对象创建
c=Counter({'a':2,'b':4})
#从一组键值对创建
c=Counter(a=2,b=4)

计数值的访问与缺失的键
当所访问的键不存在时,返回0,而不是KeyError;否则返回它的计数

计数值的访问
c=Counter('gallahad')
print(c['a'])
print(c['z'])
>>3
>>0

计数器的更新(update和subtract)
可以使用一个可迭代对象或者另一个Counter对象来更新键值对

update增加
c=Counter('gallahad')
c.update('chengzheng')
print(c['e'])
>>2
d=Counter('holloword')
c.update(d)
print(c['l'])
>>4

subtract减少
c=Counter('gallahad')
c.subtract('g')
print(c['g'])
>>0
d=Counter('all')
c.subtract(d)
print(c['l'])
>>0

键的修改和删除
当计数值为0时,并不意味着元素被删除,删除元素应当使用del
c=Counter('gallahad')
print(c)
c['a']=0
print(c)
del c['l']
print(c)
>>Counter({'a': 3, 'l': 2, 'g': 1, 'h': 1, 'd': 1})
>>Counter({'l': 2, 'g': 1, 'h': 1, 'd': 1, 'a': 0})
>>Counter({'g': 1, 'h': 1, 'd': 1, 'a': 0})

elements():
返回一个迭代器。元素被重复了多少次,在该迭代器中就包含多少个该元素。元素排列无确定顺序,个数小于1的元素不被包含。

c =Counter(a=4,b=2,c=0,d=-2)
a =list(c.elements())
print(a)
>>['a', 'a', 'a', 'a', 'b', 'b']

most_common():
返回一个top (n)列表。如果n没有被指定,则返回所有元素,当多个元素计数值相同时,排列是无序的

c =Counter('xsgffikgkhgdyrduykkf')
a =c.most_common(3)
print(a)

其他操作:
sum(c.values()) # 所有计数的总数
c.clear() # 重置Counter对象,注意不是删除
list(c) # 将c中的键转为列表
set(c) # 将c中的键转为set
dict(c) # 将c中的键值对转为字典
c.items() # 转为(elem, cnt)格式的列表
Counter(dict(list_of_pairs)) # 从(elem, cnt)格式的列表转换为Counter类对象
c.most_common()[:-n:-1] # 取出计数最少的n个元素
c += Counter() # 移除0和负值

4:OrderdDict有序字典

使用字典(dict),key是无序的,在对字典做迭代时,我们无法确定key的顺序。
如果要key有顺序,可以用OrderdDict

from collections import OrderedDict

d=dict([('a',1),('b',2),('c',3)])
print(d)
od=OrderedDict([('a',1),('b',2),('c',3)])
print(od)
>>{'c': 3, 'b': 2, 'a': 1}
>>OrderedDict([('a', 1), ('b', 2), ('c', 3)])
注意:OrderdDict是按照插入的顺序来排序的,不是按照key本身来排序的。

od=OrderedDict([('a',1),('c',3),('b',2)])
print(od)
>>OrderedDict([('a', 1), ('c', 3), ('b', 2)])

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

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

即: {'k1': 大于66 , 'k2': 小于66}

from collections import defaultdict

values = [11, 22, 33,44,55,66,77,88,99,90]
my_dict = defaultdict(list)
for value in values:
if value>66:
my_dict['k1'].append(value)
else:
my_dict['k2'].append(value)
print(my_dict)

>>defaultdict(<class 'list'>, {'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99, 90]})

最新文章

  1. java中如何实现多态
  2. Yii2.0.7 限制user module登录遇到的问题
  3. Bubble Cup 8 finals G. Run for beer (575G)
  4. Front End Developer Questions 前端开发人员问题(二)
  5. CentOS linux下安装和配置Apache+SVN(用浏览器http方式访问SVN目录)
  6. 定义返回Block的函数
  7. position&amp;containing block
  8. mac 下安装jmeter
  9. Jmeter组件4. Regular Expression Extractor
  10. LinQ的一些基本语句
  11. IOS UIView子类UIScrollView
  12. org.apache.hadoop.filecache-*
  13. 比较了一下基于PhoneGAP/JQ Mobile 等基于HTML5的Phone 开发框架
  14. vultr VPS的购买及搭建ss介绍,支持锐速加速优化
  15. C语言volatile关键字-漫画(转)
  16. 第一册:lesson ninety-seven。
  17. Delphi TXLSReadWriteII 导出EXCEL
  18. Android中消息系统模型和Handler Looper
  19. Sublime Text安装与配置
  20. burp suite 的intruder 四种攻击方式

热门文章

  1. sql with 写法
  2. OID OAM WLS等Oracle 中间件日志位置汇总
  3. zt 我们要找出毒素的藏身处,尽快把它赶出身体
  4. Docker Toolbox在window 10 home 下挂载宿主机目录到容器的正确操作
  5. OC NSMutableString的使用
  6. IBM websphere MQ远程队列的简单配置
  7. es6之proxy和reflect
  8. 如何创建.gitignore文件
  9. 常用的layer弹出层
  10. Sublime text3学习小记(macOS系统下的安装使用)