collections 模块 标签(空格分隔): pythoncook笔记
collections.deque
用法:—— 创造简单队列 ——–
使用deque(maxlen=N)会构建一个大小为N的简单队列,当新的元素加入并且这个队列已满时,最老的元素会被删除。
>>> q = deque(maxlen=3)
>>> q.append(1)
>>> q.append(2)
>>> q.append(3)
>>> q
deque([1, 2, 3], maxlen=3)
>>> q.append(4)
>>> q
deque([2, 3, 4], maxlen=3)
>>> q.append(5)
>>> q
deque([3, 4, 5], maxlen=3)
【cookbook_note|collections 模块】不设参数maxlen可以生成无限的队列,对队列的操作
q.append(1) # 在队列最右添加
q.pop(1)# 在队列最右删除
q.appendleft(1)# 在队列最左添加
q.popleft(1) # 在队列最右删除
collections.defaultdict
用法:——– 创造可以一键映射多值的字典 ———–
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> d
defaultdict(, {})
>>> d['a'].append(1)
>>> d
defaultdict(, {'a': [1]})
>>> type(d)
>>> d['a'].append(2)
>>> d
defaultdict(, {'a': [1, 2]})
>>> d['b'].append(3)
>>> d
defaultdict(, {'b': [3], 'a': [1, 2]})
collections.OrderedDict
用法: ——— 字典排序 ————–
from collections import OrderedDictd = OrderedDict()
d['foo'] = 1
d['bar'] = 2
d['spam'] = 3
d['grok'] = 4
# Outputs "foo 1", "bar 2", "spam 3", "grok 4"
for key in d:
print(key, d[key])
它将使字典保持你插入元素的顺序
注意 该方法用来支持数据量小的字典较好,它的大小为普通字典的两倍。而且因为它储存时用的双向链表,每次当一个新的元素插入进来的时候,它会被放到链表的尾部,对于一个已经存在的键的重复赋值不会改变键的顺序。
>>> from collections import OrderedDict
>>> d = OrderedDict()
>>> d['foo'] = 1
>>> d['bar'] = 2
>>> d['foo'] = 3
>>> d
OrderedDict([('foo', 3), ('bar', 2)])
collections.Counter
用法: ——– 找出列表中出现次数最多的元素 ————–
words = [
'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes',
'the', 'eyes', 'the', 'eyes', 'the', 'eyes', 'not', 'around', 'the',
'eyes', "don't", 'look', 'around', 'the', 'eyes', 'look', 'into',
'my', 'eyes', "you're", 'under'
]
from collections import Counter
word_counts = Counter(words)
print(word_counts)
# Output {'eyes': 8, 'the': 5, 'look': 4, 'my': 3, 'into': 3, 'around': 2, 'not': 1, 'under': 1, "don't": 1, "you're": 1}
# 出现频率最高的3个单词
top_three = word_counts.most_common(3)
print(top_three)
# Outputs [('eyes', 8), ('the', 5), ('look', 4)]
作为输入, Counter对象可以接受任意的由可哈希(hashable)元素构成的序列对象。在底层实现上,一个 Counter对象就是一个字典,将元素映射到它出现的次数上。
令人惊喜的是,Counter对象可以跟数学运算符进行结合
>>> a = Counter(words)
>>> b = Counter(morewords)
>>> a
Counter({'eyes': 8, 'the': 5, 'look': 4, 'into': 3, 'my': 3, 'around': 2,
"you're": 1, "don't": 1, 'under': 1, 'not': 1})
>>> b
Counter({'eyes': 1, 'looking': 1, 'are': 1, 'in': 1, 'not': 1, 'you': 1,
'my': 1, 'why': 1})
>>> # Combine counts
>>> c = a + b
>>> c
Counter({'eyes': 9, 'the': 5, 'look': 4, 'my': 4, 'into': 3, 'not': 2,
'around': 2, "you're": 1, "don't": 1, 'in': 1, 'why': 1,
'looking': 1, 'are': 1, 'under': 1, 'you': 1})
>>> # Subtract counts
>>> d = a - b
>>> d
Counter({'eyes': 7, 'the': 5, 'look': 4, 'into': 3, 'my': 2, 'around': 2,
"you're": 1, "don't": 1, 'under': 1})
推荐阅读
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Python专栏|数据分析的常规流程
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- Python绘制小红花
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- python|8. 文件系统——文件的删除、移动、复制过程以及链接文件
- 爬虫|若想拿下爬虫大单,怎能不会逆向爬虫,价值过万的逆向爬虫教程限时分享
- 分布式|《Python3网络爬虫开发实战(第二版)》内容介绍
- java|微软认真聆听了开源 .NET 开发社区的炮轰( 通过CLI 支持 Hot Reload 功能)