博客
关于我
(九)Python中的collections模块
阅读量:797 次
发布时间:2023-03-28

本文共 1708 字,大约阅读时间需要 5 分钟。

UserDict

UserDictcollections 库中的一个类,设计用于创建可自定义的字典类,允许用户定义禁止删除字典元素的类。它继承自 dict,并通过 override 方法限制删除操作。

from collections import UserDict, namedtuple, Counter, ChainMap
class 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

namedtuple 是一个工厂函数,用于创建带命名字段的 tuple 派生类。返回的 tuple 类型对象可以通过字段属性或下标访问元素,具有更直观的配置方式。

Point = namedtuple("Point", ['x', 'y'])
p = Point(x=11, y=22)
x, y = p.x, p.y
print(x, y) # 输出: 11 22
print(p[0], p.x) # 输出: 11 11

Counter

Counter 是一个用于快速统计元素频率的字典类,主要用于计数操作。它支持与其他计数器进行运算(如 +、-、&、| 等),并提供获取最常见元素的方法。

from collections import Counter
cnt = Counter()
for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
cnt[word] += 1
print(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

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/

你可能感兴趣的文章
Objective-C实现模拟键盘鼠标(附完整源码)
查看>>
Objective-C实现模板方法模式(附完整源码)
查看>>
Objective-C实现欧几里得距离(附完整源码)
查看>>
Objective-C实现欧几里得距离(附完整源码)
查看>>
Objective-C实现欧拉路径和欧拉回路算法(附完整源码)
查看>>
Objective-C实现正向CMDShell(附完整源码)
查看>>
Objective-C实现正数num使用递归找到它的二进制算法(附完整源码)
查看>>
Objective-C实现水波纹显示效果(附完整源码)
查看>>
Objective-C实现求 1 到 20 的所有数整除的最小正数算法 (附完整源码)
查看>>
Objective-C实现求1000以内的全部亲密数(附完整源码)
查看>>
Objective-C实现求a的逆元x(附完整源码)
查看>>
Objective-C实现求squareDifference平方差算法 (附完整源码)
查看>>
Objective-C实现求一个数的位数之和算法(附完整源码)
查看>>
Objective-C实现求一个数的因子算法(附完整源码)
查看>>
Objective-C实现求一组数字的平均值算法(附完整源码)
查看>>
Objective-C实现求两个数组的中位数算法(附完整源码)
查看>>
Objective-C实现求两点间距离(附完整源码)
查看>>
Objective-C实现求中位数(附完整源码)
查看>>
Objective-C实现求中位数(附完整源码)
查看>>
Objective-C实现求众数(附完整源码)
查看>>