7.Python自学之路:collections系列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7.Python自学之路:collections系列相关的知识,希望对你有一定的参考价值。
一丶计数器(counter)
counter是对字典类型的补充,用于追踪值的出现次数,它集成了父类dict所有的功能。
import collections obj = collections.Counter(‘aaabbbcccddd‘) #collections文件下的Counter类 print(obj) #以字典的形式返回 ret = obj.most_common(4) print(ret) #前4名最多的 for k in obj.elements(): #element原生的值 print(k) #aaabbbcccddd for k,v in obj.items(): #obj的键为字符,值为出现的个数,组成的字典 print(k,v) #a 3 b 3 c 3 d 3 #dict的循环方法有 items() keys() values() #counter(dict) items() keys() values() elements() obj = collections.Counter([‘11‘,‘22‘,‘33‘,‘22‘]) print(obj) obj.update([‘eric‘,‘11‘,‘11‘]) print(obj)
二丶有序字典(orderedDict)
OrderedDict是对字典类型的补充,在dict的基础上增加了有序的功能。
1 #字典和列表结合成为有序字典 2 # dic = {‘k1‘:‘v1‘,‘k2‘:‘v2‘} 3 # li = list([‘k1‘,‘k2‘]) 4 # 5 # for i in li : 6 # print(dic[i]) 7 import collections 8 9 dic = collections.OrderedDict() 10 dic[‘k1‘] = ‘v1‘ 11 dic[‘k2‘] = ‘v2‘ 12 dic[‘k3‘] = ‘v3‘ 13 print(dic) #OrderedDict([(‘k1‘, ‘v1‘), (‘k2‘, ‘v2‘), (‘k3‘, ‘v3‘)]) 14 15 dic.move_to_end(‘k1‘) #将k1和它的值放在最后 16 print(dic) #OrderedDict([(‘k2‘, ‘v2‘), (‘k3‘, ‘v3‘), (‘k1‘, ‘v1‘)]) 17 18 dic.popitem() #从最后一个开始取出来,栈。 19 print(dic) #OrderedDict([(‘k2‘, ‘v2‘), (‘k3‘, ‘v3‘)]) 20 ret = dic.pop(‘k2‘) 21 print(dic) #OrderedDict([(‘k3‘, ‘v3‘)]) 22 print(ret) #v2 23 24 dic.setdefault(‘k4‘,666)#不提供参数的时候等价于dic[‘k4‘] = none 25 print(dic) #OrderedDict([(‘k3‘, ‘v3‘), (‘k4‘, 666)]) 26 27 dic.update({‘k1‘:‘v111‘,‘k10‘:‘v10‘}) #原先有的,就修改原先的值,没有的就加进去 28 print(dic) #OrderedDict([(‘k3‘, ‘v3‘), (‘k4‘, 666), (‘k10‘, ‘v10‘), (‘k1‘, ‘v111‘)])
三丶默认字典(defaultdict)
DefaultDict是对字典的类型的补充,他默认给字典的值设置了一个类型。
1 import collections 2 3 dic = collections.defaultdict(list) #其值就是list 4 dic[‘k1‘].append(‘alex‘) 5 print(dic) #defaultdict(<class ‘list‘>, {‘k1‘: [‘alex‘]}) 6 7 8 #有如下值集合 9 #[11,22,33,44,55,66,77,88,99,90] 10 #将所有 大于66的值保存到字典的第一个key中, 11 # 将小于66的值保存到第二个key的值中。 12 #即:{‘k1‘:大于66,‘k2‘:小于等于66} 13 #目的:{‘k1‘:[66,77,88,99,90],‘k2‘:[11,22,33,44,55]} 14 15 #第一种方法: 16 dic = {} 17 all_list = [11,22,33,44,55,66,77,88,99,90] 18 for i in all_list: 19 if i > 66: 20 if ‘k1‘ in dic.keys(): 21 dic[‘k1‘].append(i) 22 else: 23 dic[‘k1‘] = [i, ] 24 else: 25 if ‘k2‘ in dic.keys(): 26 dic[‘k2‘].append(i) 27 else: 28 dic[‘k2‘] = [i, ] 29 30 #对比一下,即使我们不用初始化进去一个列表 31 #改进如下 32 dic = collections.defaultdict(list) 33 all_list = [11,22,33,44,55,66,77,88,99,90] 34 for i in all_list: 35 if i > 66: 36 dic[‘k1‘].append(i) 37 else: 38 dic[‘k2‘].append(i)
四丶可命名元组(namedtuple)
根据nametuple可以创建一个包含tuple所有功能以及其他功能的类型。
1 #t = (11, 22, 33, 44) 2 #name adddress gender Email 类似于坐标 3 #t.name 等价于 t[0] 4 5 import collections 6 7 #创建类,和defaultdict的作用类似 8 MytupleClass = collections.namedtuple(‘MytupleClass‘,[‘x‘,‘y‘,‘z‘]) 9 print(help(MytupleClass)) 10 obj = MytupleClass(11,22,33) 11 print(obj.x) 12 print(obj.y) 13 print(obj.z)
五丶队列(deque & queue.Queue)
双向队列:deque
1 import collections 2 3 #双向队列 4 d = collections.deque() 5 d.append(‘1‘) 6 d.append(‘10‘) 7 d.appendleft(‘1‘) 8 print(d) #deque([‘1‘, ‘1‘, ‘10‘]) 9 d.extend([‘yy‘,‘uu‘,‘zz‘,‘xx‘]) 10 print(d) #deque([‘1‘, ‘1‘, ‘10‘, ‘yy‘, ‘uu‘, ‘zz‘, ‘xx‘]) 11 d.rotate(5) #循环移动几位 12 print(d) #deque([‘10‘, ‘yy‘, ‘uu‘, ‘zz‘, ‘xx‘, ‘1‘, ‘1‘])
单向队列:queue.Queue
1 #单向队列 2 import queue 3 4 q = queue.Queue() 5 q.put(‘123‘) 6 q.put(‘678‘) 7 print(q.qsize()) #2 8 print(q.get()) #123 只能按类里面的顺序拿
以上是关于7.Python自学之路:collections系列的主要内容,如果未能解决你的问题,请参考以下文章