Python - collections模块
官网: 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