相等测试敏感OrderedDict 之间的相等测试是顺序敏感的
d1 = OrderedDict({'status': 200, 'message': 'success'})d2 = OrderedDict({'message': 'success', 'status': 200})d3 = {'status': 200, 'message': 'success'}d4 = {'message': 'success', 'status': 200}print('OrderedDict之间的比较结果: ', d1 == d2)print('dict之间的比较结果: ', d3 == d4)print('OrderedDict与dict的比较结果: ', d1 == d3 == d4)# 结果OrderedDict之间的比较结果:Falsedict之间的比较结果:TrueOrderedDict与dict的比较结果:Truedefaultdict返回一个新的类似字典的对象 。defaultdict 是内置 dict 类的子类 。它重载了一个方法并添加了一个可写的实例变量 。其余的功能与 dict 类相同
defaultdict的作用我们看名字就知道defaultdict的作用是为字典提供一个默认的值,我们正常情况下访问一个字典的key,如果字典中没有这个key会报错
>>> dict1 = {}>>> dict1['name']Traceback (most recent call last):File "<pyshell#1>", line 1, in <module>dict1['name']KeyError: 'name'>>>此时我们就可以使用defaultdict,它包含一个名为 default_factory 的属性,构造时,第一个参数用于为该属性提供初始值,默认为 None 。
这个default_factory可以是list、set、str,也可以是自定义的函数,作用是当key不存在时,返回的是工厂函数的默认值,比如list对应[ ],str对应的是空字符串,set对应set( ),int对应0
dict1 = defaultdict(int)dict2 = defaultdict(set)dict3 = defaultdict(str)dict4 = defaultdict(list)print(dict1['name'])print(dict2['name'])print(dict3['name'])print(dict4['name'])输出
0set()[]小例子1使用 list 作为 default_factory,我们可以很轻松地将(键-值对组成的)序列转换为(键-列表组成的)字典:
>>> from collections import defaultdict>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]>>> d = defaultdict(list)>>> for k, v in s: d[k].append(v)>>> sorted(d.items())[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]小例子2设置 default_factory 为 int,使 defaultdict 用于计数
>>> s = 'aiibiicii'>>> d = defaultdict(int)>>> for k in s: d[k] += 1>>> sorted(d.items())[('a', 1), ('b', 1), ('c', 1), ('i', 6)]小例子3如果你需要自己定义一个返回值,你可以创建1个函数,设置自定义的返回值
def constant_factory(value):return lambda: valued = defaultdict(constant_factory('success'))d.update(status=200)var = d['message']print(sorted(d.items()))# 输出[('message', 'success'), ('status', 200)]Counter对象它一个计数器工具提供快速和方便的计数 。它是 dict 的子类,用于计数可哈希对象 。它是一个集合,元素像字典键(key)一样存储,它们的计数存储为值 。计数可以是任何整数值,包括0和负数 。
创建方式元素从一个 iterable 被计数或从其他的 mapping (or counter)初始化:
c = Counter()# a new, empty counterc = Counter('gallahad')# a new counter from an iterablec = Counter({'red': 4, 'blue': 2})# a new counter from a mappingc = Counter(cats=4, dogs=8)# a new counter from keyword args如果引用的键没有任何记录,就返回一个0,而不是弹出一个 KeyError
>>> c = Counter(['eggs', 'ham'])>>> c['bacon']0作为 dict 的子类,Counter 继承了记住插入顺序的功能 。
经验总结扩展阅读
- 信号量 C# 多线程访问之 SemaphoreSlim【C# 进阶】
- 炉石传说新手攻略萌新到底怎么玩(炉石传说新手进阶流程)
- 38 全球名校AI课程库| 马萨诸塞大学 · 自然语言处理进阶课程『Advanced Natural Language Processing』
- Python基础指面向对象:2、动静态方法
- Python基础之面向对象:3、继承与派生
- ysoserial CommonsCollections2 分析
- 如何免安装使用 Python?推荐 17 个在线的 Python 解释器!
- Python处理刚刚,分钟,小时,天前等时间
- python渗透测试入门——取代netcat
- 六 Selenium4+Python3系列 - Selenium的三种等待,强制等待、隐式等待、显式等待
