本文共 1708 字,大约阅读时间需要 5 分钟。
UserDict 是 collections 库中的一个类,设计用于创建可自定义的字典类,允许用户定义禁止删除字典元素的类。它继承自 dict,并通过 override 方法限制删除操作。
from collections import UserDict, namedtuple, Counter, ChainMapclass MyDict(UserDict): def pop(self, s=None): raise RuntimeError("Deletion not allowed") def popitem(self, s=None): raise RuntimeError("Deletion not allowed")md = MyDict()md["name"] = "Tom"print(md) # 输出: {'name': 'Tom'}md.pop("name") # 会抛出 RuntimeError namedtuple 是一个工厂函数,用于创建带命名字段的 tuple 派生类。返回的 tuple 类型对象可以通过字段属性或下标访问元素,具有更直观的配置方式。
Point = namedtuple("Point", ['x', 'y'])p = Point(x=11, y=22)x, y = p.x, p.yprint(x, y) # 输出: 11 22print(p[0], p.x) # 输出: 11 11 Counter 是一个用于快速统计元素频率的字典类,主要用于计数操作。它支持与其他计数器进行运算(如 +、-、&、| 等),并提供获取最常见元素的方法。
from collections import Countercnt = Counter()for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']: cnt[word] += 1print(cnt) # 输出: Counter({'blue': 3, 'red': 2, 'green': 1})print(cnt.most_common(2)) # 输出: [('blue', 3), ('red', 2)]print(cnt + cnt) # 输出: Counter({'blue': 6, 'red': 4, 'green': 2}) ChainMap 是一个用于将多个字典或映射对象组合成一个可更新的视图的类。它支持管理多个上下文,查询时会沿着链路逐步查找,实际操作中不会创建新的字典实例。
baseline = {'music': 'bach', 'art': 'rembrandt'}adjustments = {'art': 'van gogh', 'opera': 'carmen'}c = ChainMap(adjustments, baseline)print(c.maps) # 输出: [{'art': 'van gogh', 'opera': 'carmen'}, {'music': 'bach', 'art': 'rembrandt'}]print(c.parents) # 输出: ChainMap({'music': 'bach', 'art': 'rembrandt'})nd = {"a": "b"}nc = c.new_child(nd)print(nc) # 输出: ChainMap({'a': 'b'}, {'art': 'van gogh', 'opera': 'carmen'}, {'music': 'bach', 'art': 'rembrandt'})nc['a'] = "bb"print(nd) # 输出: {'a': 'bb'} 转载地址:http://wohfk.baihongyu.com/