首页 > 代码库 > Python基础之collection

Python基础之collection

collection-系列

  cellection是作为字典、元组(列表与元组可互相转换)的扩充,在此需要导入cellection

一、计数器(counter)

  counter是对字典类型的补充,用户获取字典中元素出现的次数。它具备字典所有的功能以及自己自带的功能。

  

  技术分享
1 import collections
2 stra = collections.Counter(asdfasdfasdfdgghjertgfgsa)
3 print(stra)
4 输出的结果是:
5 Counter({a: 4, d: 4, g: 4, f: 4, s: 4, e: 1, h: 1, j: 1, r: 1, t: 1})
6 后面的数字表示的是出现的次数。
Counte

   most_common,出现最多  

  技术分享
1 import collections
2 stra = collections.Counter(asdfasdfasdf[dggh]jertgfgsa)
3 print(stra)
4 ret = stra.most_common(4)
5 print(ret)
6 测试结果:
7 Counter({a: 4, d: 4, g: 4, f: 4, s: 4, e: 1, h: 1, j: 1, r: 1, t: 1, [: 1, ]: 1})
8 
9 [(a, 4), (d, 4), (g, 4), (f, 4)] 输出了排名前四的
most_common

   elements元素:  

  技术分享
 1 import collections
 2 stra = collections.Counter(asdfasdfasdf[dggh]jertgfgsa)
 3 for items in stra.elements():
 4     print(items)
 5 执行结果:
 6 Counter({a: 4, d: 4, g: 4, f: 4, s: 4, e: 1, h: 1, j: 1, r: 1, t: 1, [: 1, ]: 1})
 7 a
 8 a
 9 a
10 a
11 e
12 d
13 d
14 d
15 d
16 g
17 g
18 g
19 g
20 f
21 f
22 f
23 f
24 h
25 j
26 s
27 s
28 s
29 s
30 r
31 t
32 [
33 ]
34 区别于:
35 import collections
36 stra = collections.Counter(asdfasdfasdf[dggh]jertgfgsa)
37 print (stra)
38 # for item in stra.elements():
39 #     print(item)
40 for item in stra.items():
41     print(item)
42 执行结果:
43 Counter({a: 4, d: 4, g: 4, f: 4, s: 4, e: 1, h: 1, j: 1, r: 1, t: 1, [: 1, ]: 1})
44 (a, 4)
45 (e, 1)
46 (d, 4)
47 (g, 4)
48 (f, 4)
49 (h, 1)
50 (j, 1)
51 (s, 4)
52 (r, 1)
53 (t, 1)
54 ([, 1)
55 (], 1)
View Code

  更新(增加删除)操作:  

  技术分享
 1 增加:
 2 import collections
 3 stra = collections.Counter([aa,bb,cc])
 4 print(stra)
 5 stra.update([dd,aa,bb])
 6 print(stra)
 7 结果:
 8 Counter({aa: 1, cc: 1, bb: 1})
 9 Counter({aa: 2, bb: 2, cc: 1, dd: 1}) 证明增加成功。
10 删除:
11 import collections
12 stra = collections.Counter([aa,bb,cc])
13 print(stra)
14 stra.update([dd,aa,bb])
15 print(stra)
16 stra.subtract([dd,aa,bb])
17 print(stra)
18 输出结果:
19 Counter({aa: 1, cc: 1, bb: 1})
20 Counter({aa: 2, bb: 2, cc: 1, dd: 1})
21 Counter({aa: 1, cc: 1, bb: 1, dd: 0})证明已经删除了。
View Code

二、有序字典(orderedDict)

  有序字典是对字典的补充:  

  技术分享
 1 dic = collections.OrderedDict()
 2 dic[k1] = v1
 3 dic[k2] = v2
 4 dic[k3] = v3
 5 dic[k4] = v4
 6 dic[k5] = v5
 7 print(dic)
 8 结果输出:
 9 OrderedDict([(k1, v1), (k2, v2), (k3, v3), (k4, v4), (k5, v5)])
10 值不会变而且是固定了,不像字典一样位置会是浮动变化的。
11 
12 popitem用法:
13 dic = collections.OrderedDict()
14 dic[k1] = v1
15 dic[k2] = v2
16 dic[k3] = v3
17 dic[k4] = v4
18 dic[k5] = v5
19 print(dic)
20 c = dic.popitem()
21 print(dic)
22 print(c)
23 输出结果:
24 OrderedDict([(k1, v1), (k2, v2), (k3, v3), (k4, v4), (k5, v5)])
25 OrderedDict([(k1, v1), (k2, v2), (k3, v3), (k4, v4)])
26 (k5, v5)取出了‘k5’,v5是最后进的,所以遵循后进先出。
27 pop用法:
28 dic = collections.OrderedDict()
29 dic[k1] = v1
30 dic[k2] = v2
31 dic[k3] = v3
32 dic[k4] = v4
33 dic[k5] = v5
34 print(dic)
35 # c = dic.popitem()
36 c = dic.pop(k2)      ###指定取出k2
37 print(dic)
38 print(c)
39 输出结果:
40 OrderedDict([(k1, v1), (k2, v2), (k3, v3), (k4, v4), (k5, v5)])
41 OrderedDict([(k1, v1), (k3, v3), (k4, v4), (k5, v5)])   pop表示是拿出删除据为己有。
42 v2       得到k2值
43 
44 新增update:
45 dic = collections.OrderedDict()
46 dic[k1] = v1
47 dic[k2] = v2
48 dic[k3] = v3
49 dic[k4] = v4
50 dic[k5] = v5
51 print(dic)
52 dic.update({k1:12,k5:10,k10:20})
53 print(dic)
54 输出结果:
55 OrderedDict([(k1, v1), (k2, v2), (k3, v3), (k4, v4), (k5, v5)])
56 OrderedDict([(k1, 12), (k2, v2), (k3, v3), (k4, v4), (k5, 10), (k10, 20)])表示有k值更新k值。没有就新增。
View Code

三、默认字典(defaultdict)  

  defaultdict是对字典的类型的补充,他默认给字典的值设置了一个类型。 

  技术分享
 1 import collections
 2 dic = collections.defaultdict(list)  #定义默认字典类型为list。
 3 dic[k1].append(100)
 4 print(dic)
 5 输出:
 6 defaultdict(<type list>, {k1: [100]})
 7 
 8 如果不采用默认字典:
 9 import collections
10 dic = {}
11 dic[k1].append(100)
12 print(dic)
13 会报错:
14 Traceback (most recent call last):
15   File "C:/Users/daisy/PycharmProjects/s12/day3/collection-???.py", line 54, in <module>
16     dic[k1].append(100)
17 KeyError: k1
View Code

四、可命名元组(namedtuple)

  技术分享
 1 import collections
 2 #创建类。MyTupleClass 
 3 MyTupleClass = collections.namedtuple(MyTupleClass,[x,y,z])
 4 obj = MyTupleClass(xx,yy,zz)
 5 print(obj.x)
 6 print(obj.y)
 7 print(obj.z)
 8 测试:
 9 xx
10 yy
11 zz
View Code

五、双向队列(deque)

  技术分享
 1 que = collections.deque()
 2 que.append(1)
 3 que.appendleft(10)
 4 que.append(20)
 5 que.extend([xx,xxd,xxxd])
 6 que.extendleft([11,22,333])
 7 print(que)
 8 print(que.rotate(2))
 9 print(que.count(1))
10 print(que)
11 执行:
12 deque([333, 22, 11, 10, 1, 20, xx, xxd, xxxd])
13 None
14 1
15 deque([xxd, xxxd, 333, 22, 11, 10, 1, 20, xx])
View Code

六、单向队列(queue.queue)在queue  

  技术分享
 1 import Queue
 2 q = Queue.Queue()
 3 q.put("abc")
 4 q.put("def")
 5 print(q.qsize())
 6 print(q.get())
 7 运行结果:
 8 
 9 2
10 abc    先进先出:abc先进所以输出abc。
View Code

 

 

 

 

  

 

 

  

 

Python基础之collection