代码改变世界

Python - collections模块

2022-03-11 16:09  起个昵称  阅读(50)  评论(1编辑  收藏  举报

官网: https://docs.python.org/3/library/collections.html#module-collections

 

ChainMap() 

获取多个字典的key,去掉重复

1 from collections import ChainMap
2 
3 baseline = {'A': 'a', 'B': 'b'}
4 adjust = {'A': '1', 'C': '2'}
5 print(list(ChainMap(adjust, baseline)))  # ['A', 'B', 'C']

 

Counter()

统计元素出现的次数

 1 from collections import Counter
 2 
 3 cnt = Counter()
 4 for word in ['red', 'blue', 'red', 'green', 'blue', 'blue', 'pink', 'black', 'red', 'yellow']:
 5     cnt[word] += 1
 6 print(cnt)    # 统计出现次数  Counter({'red': 3, 'blue': 3, 'green': 1, 'pink': 1, 'black': 1, 'yellow': 1})
 7 
 8 print(cnt.most_common(2))     # 出现次数多的前n位  [('red', 3), ('blue', 3)]
 9 
10 print(sorted(cnt.elements()))   # 还原 ['black', 'blue', 'blue', 'blue', 'green', 'pink', 'red', 'red', 'red', 'yellow']
11 
12 c = Counter(a=3, b=2, c=1, d=0)
13 print(sorted(c.elements()))    # ['a', 'a', 'a', 'b', 'b', 'c']

 

deque()

部分方法示例。创建队列,数据在队列里的进出

 1 from collections import deque
 2 
 3 dq = deque('abcd')
 4 print(dq)             # 一个队列 deque(['a', 'b', 'c', 'd'])
 5 dq.append('x')
 6 print(dq)            # 右端入队 deque(['a', 'b', 'c', 'd', 'x'])
 7 dq.appendleft('y')
 8 print(dq)            # 左端入队  deque(['y', 'a', 'b', 'c', 'd', 'x'])
 9 dq.pop()
10 print(dq)            # deque(['y', 'a', 'b', 'c', 'd'])
11 dq.popleft()
12 print(dq)            # deque(['a', 'b', 'c', 'd'])
13 dq.rotate(1)
14 print(dq)            # deque(['d', 'a', 'b', 'c'])
15 dq.rotate(-1)
16 print(dq)            # deque(['a', 'b', 'c', 'd'])
17 dq.clear()
18 print(dq)            # deque([])

 

defaultdict()

对列表元素的各种统计

 1 from collections import defaultdict
 2 
 3 s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
 4 d = defaultdict(list)
 5 for k, v in s:
 6     d[k].append(v)
 7 print(sorted(d.items()))     #  [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
 8 
 9 s = 'mississippi'
10 d = defaultdict(int)
11 for k in s:
12     d[k] += 1
13 print(sorted(d.items()))     #  [('i', 4), ('m', 1), ('p', 2), ('s', 4)]
14 
15 s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 1), ('red', 1), ('blue', 4)]
16 d = defaultdict(set)
17 for k, v in s:
18     d[k].add(v)
19 print(sorted(d.items()))    #  [('blue', {1, 2, 4}), ('red', {1, 3})]

 

nametuple()

 

OrderedDict()

创建有序字典,按插入顺序

1 from collections import OrderedDict
2 
3 d = OrderedDict.fromkeys('abcde')
4 print(d)              # OrderedDict([('a', None), ('b', None), ('c', None), ('d', None), ('e', None)])
5 d.move_to_end('b')
6 print(''.join(d))     # acdeb
7 print(d)              # OrderedDict([('a', None), ('c', None), ('d', None), ('e', None), ('b', None)])
8 d.move_to_end('b', last=False)
9 print(''.join(d))     # bacde