一、计数器
Counter是对字典类型的补充,用于追踪值的出现次数,具备字典的所有功能加自己的功能。
1 import collections 2 obj = collections.Counter('aadsdfasddfg') #计数 3 print(obj) 4 Counter({'d': 4, 'a': 3, 'f': 2, 's': 2, 'g': 1}) #输出结果
方法
1.most_common #取前几位
obj = collections.Counter('aadsdfasddfg') ret = obj.most_common(4) #拿前四位 print(ret) [('d', 4), ('a', 3), ('s', 2), ('f', 2)]
2.sorted #输出每个元素
a = sorted(obj) print(a) ['a', 'd', 'f', 'g', 's'] #输出结果
3.join
a = ''.join(sorted(obj.elements())) print(a) aaaddddffgss
4.sum #统计总数
a = sum(obj.values()) print(a) 12 #输出结果
5.
1 a = obj['a'] #统计a的个数 2 print(a) 3 3 #输出结果 4 5 del obj['d'] #删除‘d’ 6 b = obj['d'] 7 print(b) 8 0 #输出结果 9 10 d = collections.Counter('asdfgjjk') #新添加一个计数器 11 obj.update(d) #新计数器更新到obj 12 c = obj['a'] 13 print(c) 14 4 #输出结果 15 16 obj.clear() #清空 17 print(obj) 18 19 e = collections.Counter('aaabbc') 20 e['b'] -= 2 #其中的‘b'减去2 21 f = e.most_common() 22 print(f)
6.update #更新计数器
obj = collections.Counter(['11','22','33']) obj.update(['44','11','11']) print(obj) Counter({'11': 3, '22': 1, '44': 1, '33': 1})
7.subtract #相减
obj.subtract('hak') a = obj['a'] print(a) 2
二、有序字典(orderedDict)
orderdDict是对字典类型的补充,他记住了字典元素添加的顺序
1 #有序字典 2 3 import collections 4 5 dic = collections.OrderedDict() 6 #dic = dict() 7 dic['k1'] = 'v1' 8 dic['k2'] = 'v2' 9 dic['k3'] = 'v3' 10 dic['k4'] = None 11 # dic.setdefault('k4') #效果同上 12 print(dic) 13 OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', None)]) 14 15 dic.move_to_end('k1') #把k1移到最后 16 print(dic) 17 OrderedDict([('k2', 'v2'), ('k3', 'v3'), ('k4', None), ('k1', 'v1')]) 18 19 dic.popitem() #把第一个删除 20 print(dic) 21 OrderedDict([('k2', 'v2'), ('k3', 'v3'), ('k4', None)]) 22 23 dic.update({'k1':'v111','k10':'v10'}) #更新 24 print(dic) 25 OrderedDict([('k2', 'v2'), ('k3', 'v3'), ('k4', None), ('k1', 'v111'), ('k10', 'v10')])
三、默认字典(defaultdict)
import collections from collections import defaultdict dic = {'k1':[]} #普通方法 dic['k1'].append('yoyo') dic = collections.defaultdict(list) #使用默认字典 dic['k1'].append('yoyo') print(dic)
应用:
有如下值集合 [
11
,
22
,
33
,
44
,
55
,
66
,
77
,
88
,
99
,
90.
..],将所有大于
66
的值保存至字典的第一个key中,将小于
66
的值保存至第二个key的值中。
即: {
'k1'
: 大于
66
,
'k2'
: 小于
66
}
使用默认字典:
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)
普通方法:
values = [11,22,33,44,55,66,77,88,99] new_dic = {} list1 = [] list2 = [] for i in values: if i >66: list1.append(i) else: list2.append(i) new_dic['k1'] = list1 new_dic['k2'] = list2 print(new_dic)
for i in values: if i>66: if 'k1' in new_dic.keys(): new_dic['k1'].append(i) else: new_dic['k1'] = [i,] else: if 'k2' in new_dic.keys(): new_dic['k2'].append(i) else: new_dic['k2'] = [i,] print(new_dic)
四、可命名元组
根据nametuple可以创建一个包含tuple所有功能以及其他功能的类型
import collections #创建类,defaultdict MytupleClass = collections.namedtuple('MytupleClass',['x','y','z']) print(help(MytupleClass)) obj = MytupleClass(11,22,33) print(obj.x) print(obj.y) print(obj.z) 11 #打印结果 22 33
五、双向队列
1 #双向队列 2 d = collections.deque() 3 d.append('1') 4 d.appendleft('10') 5 d.appendleft('1') 6 print(d) 7 #deque(['1', '10', '1']) 8 r = d.count('1') 9 print(r) 10 #2 11 d.extend(['yy','uu','ii']) #向右添加 12 print(d) 13 #deque(['1', '10', '1', 'yy', 'uu', 'ii']) 14 d.extendleft(['aa','bb','cc']) #向左添加 15 print(d) 16 #deque(['cc', 'bb', 'aa', '1', '10', '1', 'yy', 'uu', 'ii']) 17 d.rotate(1) #最后一个移到第一个 18 print(d) 19 #deque(['ii', 'cc', 'bb', 'aa', '1', '10', '1', 'yy', 'uu'])
单向队列
#单向队列 import queue q = queue.Queue() q.put('123') q.put('678') print(q.qsize()) print(q.get()) #先进先出 # 2 # 123