python3 collections模块_Python常用数据结构之collections模块

Python数据结构常用模块:、heapq、operator、itertools

collections

collections是日常工作中的重点、高频模块,常用类型有:

计数器(Counter)

双向队列(deque)

默认字典(defaultdict)

有序字典(OrderedDict)

可命名元组(namedtuple)

1. Counter

Counter作为字典dicit()的一个子类用来进行hashtable计数,将元素进行数量统计,计数后返回一个字典,键值为元素,值为元素个数

常用方法:

most_common(int)

按照元素出现的次数进行从高到低的排序,返回前int个元素的字典

elements

返回经过计算器Counter后的元素,返回的是一个迭代器

update

和set集合的update一样,对集合进行并集更新

substract

和update类似,只是update是做加法,substract做减法,从另一个集合中减去本集合的元素

iteritems

返回由Counter生成的字典的所有item

iterkeys

返回由Counter生成的字典的所有key

itervalues

返回由Counter生成的字典的所有value

示例:

#coding=utf-8

from collections importCounter

str= "abcbcaccbbad"li= ["a","b","c","a","b","b"]

d= {"1":3, "3":2, "17":2}#Counter获取各元素的个数,返回字典

print ("Counter(s):", Counter(str))print ("Counter(li):", Counter(li))print ("Counter(d):", Counter(d))#most_common(int)按照元素出现的次数进行从高到低的排序,返回前int个元素的字典

d1 =Counter(str)print ("d1.most_common(2):",d1.most_common(2))#elements返回经过计算器Counter后的元素,返回的是一个迭代器

print ("sorted(d1.elements()):", sorted(d1.elements()))print ('''("".join(d1.elements())):''',"".join(d1.elements()))#若是字典的话返回value个key

d2 =Counter(d)print("若是字典的话返回value个key:", sorted(d2.elements()))#update和set集合的update一样,对集合进行并集更新

print ("d1.update("sas1"):",d1.update("sas1"))

>>>> Counter(s): Counter({'b': 4, 'c': 4, 'a': 3, 'd': 1})

>>>> Counter(li): Counter({'b': 3, 'a': 2, 'c': 1})

>>>> Counter(d): Counter({'1': 3, '3': 2, '17': 2})

>>>> d1.most_common(2): [('b', 4), ('c', 4)]

>>>> sorted(d1.elements()): ['a', 'a', 'a', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'c', 'd']

>>>> ("".join(d1.elements())): aaabbbbccccd

>>>> ['1', '1', '1', '17', '17', '3', '3']

2. deque

deque属于高性能的数据结构之一,常用方法如下:

append

队列右边添加元素

appendleft

队列左边添加元素

clear

清空队列中的所有元素

count

返回队列中包含value的个数

extend

队列右边扩展,可以是列表、元组或字典,如果是字典则将字典的key加入到deque

extendleft

同extend,在左边扩展

pop

移除并返回队列右边的元素

popleft

移除并返回队列左边的元素

remove(value)

移除队列第一个出现的元素

reverse

队列的所有元素进行反转

rotate(n)

对队列数进行移动

3. defaultdict

默认字典,字典的一个子类,继承所有字典的方法,默认字典在进行定义初始化的时候得指定字典值有默认类型

dic =defaultdict(dict)

dic["k1"].update({"asdsa":"123"})print(dic)>>> defaultdict(, {'k1': {'asdsa': '123'}})

注:字典dic在定义的时候就定义好了值为字典类型,虽然现在字典中还没有键值 k1,但仍然可以执行字典的update方法. 这种操作方式在传统的字典类型中是无法实现的,必须赋值以后才能进行值得更新操作,否则会报错。

4. OrderedDict

有序字典也是字典的一个子类

传统方法进行字典排序

#定义传统字典

dic1 =dict()#按顺序添加字典内容

dic1['a'] = '123'dic1['b'] = 'jjj'dic1['c'] = '394'dic1['d'] = '999'

print(dic1) #结果: {'a': '123', 'c': '394', 'b': 'jjj', 'd': '999'}#排序

dic1_key_list =[]for k indic1.keys():

dic1_key_list.append(k)

dic1_key_list.sort()for key indic1_key_list:print('dic1字典排序结果 %s:%s' %(key,dic1[key]))

使用OrderedDict对字典进行排序

#定义有序字典

dic2 =OrderedDict()

dic2['a'] = '123'dic2['b'] = 'jjj'dic2['c'] = 'abc'dic2['d'] = '999'

for k, v indic2.iteritems():print('有序字典:%s:%s' %(k,v))

5. namedtuple

namedtuple由自己的类工厂namedtuple()进行创建,而不是由表中的元组进行初始化,通过namedtuple创建类的参数包括类名称和一个包含元素名称的字符串

常用方法示例:

#coding=utf-8

from collections importnamedtuple

p= namedtuple("person", "name,age,sex")print(type(p))

zhanglin= p("zhanglin",30,"male")print(zhanglin)print(zhanglin.name,zhanglin.age)

>>>

>>> person(name='zhanglin', age=30, sex='male')

>>> zhanglin 30

rename参数使用

使用namedtuple()来创建类的时候,传递的成员属性参数名称不能非法(不能重复,不能为系统标识符),否则会报错

try:

pp= namedtuple("person","name,age,class,sex")print(pp._fields)

lili= pp("lili",20,"aa","male")exceptException as e:print("error",e)

>>> error Type names and field names cannot be a keyword: 'class'

输入错误非我们可以控制,namedtuple提供rename=True参数会使系统自动的将错误的参数通过“下划线+参数索引”的方式将参数名称替换

try:

pp= namedtuple("person","name,age,class,sex",rename=True)print(pp._fields)

lili= pp("lili",20,"aa","male")exceptException as e:print("error",e)

>>> ('name', 'age', '_2', 'sex')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值