建议先下载pdf文档, 进行对照查看
PDF文档以及代码
下载:https://www.lanzous.com/i4hlpuh 密码:dvwg
参考图片:
collections.defaultdict()
使用collections
模块中的defaultdict
来构造有个字典. defaultdict
会自动初始化每个key
刚开始对应的值.
from collections import defaultdict
>>> defaultdict(list) # 字典中的value值为列表, 用于创建多值映射字典
>>> defaultdict(dict) # 字典中的value值为字典
>>> defaultdict(set) # 字典中的value值为set
注意: defaultdict
会自动将要访问的键(就算目前字典中并不存在这样的键)创建映射实体.
collections.OrderedDict()
为了控制元素在插入字典时的顺序, 可以使用collections
模块中的OrderedDict
类. 在迭代的时候会保持元素插入的顺序
from collections import OrderedDict
d = OrderedDict()
d['a'] = 1
d['b'] = 2
- 使用场景 当想要构建一个将来需要序列化或编码成其他格式(比如: JSON格式)的映射的时候
OrderedDict
是非常有用的 - 排序原因:
OrderedDict
之所以能够维持插入元素的数据是因为, 其内部维持着一个插入顺序的 双向链表. - 需要注意: 由于内部维持着一个 双向列表, 在构建大量数据(比如:10W条CSV数据)的时候, 会有较大内存的消耗
collections.Counter()
使用场景
找出一个序列中出现次数最多的元素
使用方法:
- 创建一个
Counter
实例
from collections import Counter
count = Counter(iterable)
- 实例化之后, 就已经进行排序了, 返回的是一个排序后的字典类型
most_common(n)
: 返回出现次数最大多的n个元素
top_nums = count.most_common(n)
n
的的大小可以超过列表长度
count[key]
返回某个元素出现的次数
apple_num = count['apple']
Counter
实例可以进行数学算数运算
collections.namedtuple()
使用场景
你有一段通过下标访问列表或者元组中元素的代码, 但是这样有时候会使得你的代码难以阅读, 于是你想 通过名称来访问元素。
使用方法
>>> from collections import namedtuple
>>> Subscriber = namedtuple('Subscriber', ['addr', 'joined'])
>>> sub = Subscriber('jonesy@example.com', '2012-10-19')
>>> sub
Subscriber(addr='jonesy@example.com', joined='2012-10-19')
>>> sub.addr
'jonesy@example.com'
>>> sub.joined
'2012-10-19'
>>>
Subscriber = namedtuple(typename: str, field_names)
: 需要给定一个名字typename
, 和一个可迭代元素field_names
namedtuple()
: 返回的是一个元组类型, 但是可以通过_replace()
方法来修改
>>> s = s._replace(shares=75)
>>> s
Stock(name='ACME', shares=75, price=123.45)
>>>
使用优点
- 使用
namedtuple()
作为字典的替代, 对于构建大量数据会使程序更加高效 - 可以通过 访问元素名来访问元素, 增加代码的可读性
collections.ChainMap()
使用场景
将字典 逻辑上合并在一起, 然后执行某些操作
使用方法
a = dict1
b = dict2
c = ChainMap(a, b)
- 需要注意的是:
ChainMap
只是 逻辑上使两个或多个字典合并在了一起 ChainMap
返回值的是一个元组类型, 不能修改数据- 如果出现重复键, 那么第一次出现的映射值将被返回
使用优点
ChainMap
方法不破坏原有字典, 不创建新的字典, 保证了数据的完整性
collections.deque(双向队列)
使用场景
在迭代操作或者其他操作的时候, 只保留最后有限几个元素的历史记录
使用方法
from collections import deque
q = deque(maxlen=n)
q.append(item) # 默认插入右边
q.appendleft(item) # 从左边插入
q.pop() # 默认弹出最右边的元素(最新元素
q.popleft() # 弹出最左边的元素(最老元素)
deque
可以添加一个关键字参数maxlen
指明这个双向队列的大小- 如果插入的元素长度大于
maxlen
时, 最老的元素会被自动移除 - 如果不设置
maxlen
则默认为无限长度
- 如果插入的元素长度大于
- 尽管你可以对普通列表进行
append
pop
进行这样的操作, 但是使用deque
更加优雅快捷