python cookbook collections模块总结

建议先下载pdf文档, 进行对照查看
PDF文档以及代码
下载:https://www.lanzous.com/i4hlpuh 密码:dvwg
参考图片:
collections总结

collections.defaultdict()

CookeBook - defaultdict

使用collections模块中的defaultdict来构造有个字典. defaultdict会自动初始化每个key刚开始对应的值.

from collections import defaultdict

>>> defaultdict(list)  # 字典中的value值为列表, 用于创建多值映射字典
>>> defaultdict(dict)  # 字典中的value值为字典
>>> defaultdict(set)   # 字典中的value值为set

注意: defaultdict会自动将要访问的键(就算目前字典中并不存在这样的键)创建映射实体.


collections.OrderedDict()

CookeBook - OrderedDict

为了控制元素在插入字典时的顺序, 可以使用collections模块中的OrderedDict类. 在迭代的时候会保持元素插入的顺序

from collections import OrderedDict


d = OrderedDict()
d['a'] = 1
d['b'] = 2
  • 使用场景 当想要构建一个将来需要序列化或编码成其他格式(比如: JSON格式)的映射的时候OrderedDict是非常有用的
  • 排序原因: OrderedDict之所以能够维持插入元素的数据是因为, 其内部维持着一个插入顺序的 双向链表.
  • 需要注意: 由于内部维持着一个 双向列表, 在构建大量数据(比如:10W条CSV数据)的时候, 会有较大内存的消耗

collections.Counter()

CookeBook - Counter

使用场景

找出一个序列中出现次数最多的元素

使用方法:
  1. 创建一个Counter实例
from collections import Counter

count = Counter(iterable)
  • 实例化之后, 就已经进行排序了, 返回的是一个排序后的字典类型
  1. most_common(n): 返回出现次数最大多的n个元素
top_nums = count.most_common(n)
  • n的的大小可以超过列表长度
  1. count[key]返回某个元素出现的次数
apple_num = count['apple']
  1. Counter实例可以进行数学算数运算

collections.namedtuple()

CookeBook - 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()

CookeBook - ChainMap

使用场景

将字典 逻辑上合并在一起, 然后执行某些操作

使用方法
a = dict1
b = dict2
c = ChainMap(a, b)
  • 需要注意的是: ChainMap只是 逻辑上使两个或多个字典合并在了一起
  • ChainMap返回值的是一个元组类型, 不能修改数据
  • 如果出现重复键, 那么第一次出现的映射值将被返回
使用优点
  • ChainMap方法不破坏原有字典, 不创建新的字典, 保证了数据的完整性

collections.deque(双向队列)

CookeBook - 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更加优雅快捷

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值