python常用内建模块:collections

collections 是 Python 标准库中的一个模块,它提供了许多有用的容器数据类型,这些类型是对内置类型的扩展或补充。以下是 collections 模块中一些常用的类和它们的基本用法:

导入模块

首先,你需要导入 collections 模块:

复制代码

python复制代码

|---|----------------------|
| | import collections |

常用类和用途

  1. namedtuple

    namedtuple 是一个工厂函数,用于创建可以通过属性名访问元素内容的元组子类。它使得代码更加清晰和可读。

    复制代码

    python复制代码

    |---|-------------------------------------------------------|
    | | Point = collections.namedtuple('Point', ['x', 'y']) |
    | | p = Point(1, 2) |
    | | print(p.x, p.y) # 输出: 1 2 |

  2. deque

    deque 是一个双端队列,支持从两端快速添加和删除元素。它对于实现队列和栈非常有用。

    复制代码

    python复制代码

    |---|--------------------------------|
    | | d = collections.deque() |
    | | d.append(1) |
    | | d.appendleft(2) |
    | | print(d) # 输出: deque([2, 1]) |
    | | print(d.pop()) # 输出: 1 |
    | | print(d.popleft()) # 输出: 2 |

  3. Counter

    Counter 是一个字典子类,用于计数可哈希对象。它是一个集合,其中元素存储为字典的键,而它们的计数存储为字典的值。

    复制代码

    python复制代码

    |---|------------------------------------------------------------|
    | | c = collections.Counter(['a', 'b', 'c', 'a', 'b', 'b']) |
    | | print(c) # 输出: Counter({'b': 3, 'a': 2, 'c': 1}) |
    | | print(c['a']) # 输出: 2 |
    | | c['d'] += 1 |
    | | print(c) # 输出: Counter({'b': 3, 'a': 2, 'c': 1, 'd': 1}) |

  4. defaultdict

    defaultdict 是一个字典子类,它调用一个工厂函数来提供缺失的键的值。这避免了在访问不存在的键时抛出 KeyError。

    复制代码

    python复制代码

    |---|-------------------------------------------|
    | | dd = collections.defaultdict(int) |
    | | dd['a'] += 1 |
    | | print(dd['a']) # 输出: 1 |
    | | print(dd['b']) # 输出: 0,因为默认值是 int 类型的 0 |

  5. OrderedDict

    OrderedDict 是一个字典子类,它记住了元素被添加的顺序。这对于需要保持元素插入顺序的场景非常有用。

    复制代码

    python复制代码

    |---|----------------------------------|
    | | od = collections.OrderedDict() |
    | | od['a'] = 1 |
    | | od['b'] = 2 |
    | | od['c'] = 3 |
    | | for key, value in od.items(): |
    | | print(key, value) |
    | | # 输出将按照插入顺序: a 1, b 2, c 3 |

  6. ChainMap

    ChainMap 将多个字典或映射对象组合成一个视图,以便可以像单个字典一样进行查找操作。它首先查找第一个映射,如果找不到,则查找下一个,依此类推。

    复制代码

    python复制代码

    |---|----------------------------------------------------------|
    | | c = collections.ChainMap({'a': 1}, {'b': 2}, {'a': 3}) |
    | | print(c['a']) # 输出: 1,因为第一个映射中有 'a' |
    | | print(c['b']) # 输出: 2,因为第二个映射中有 'b' |
    | | print(list(c.keys())) # 输出: ['a', 'b'],按第一个映射中的顺序 |

  7. UserDict, UserList, UserString

    这些类分别是对内置 dict, list, 和 str 类型的封装,提供了更多的灵活性来扩展或修改它们的行为。它们通常用于需要继承内置类型并添加额外功能的情况。

    复制代码

    python复制代码

    |---|-------------------------------------------|
    | | class MyDict(collections.UserDict): |
    | | def __missing__(self, key): |
    | | return 'default_value' # 当访问不存在的键时返回默认值 |
    | | |
    | | mydict = MyDict() |
    | | print(mydict['a']) # 输出: default_value |

通过使用 collections 模块中的这些类和函数,你可以更有效地处理数据,并编写更清晰、更具可读性的代码。

相关推荐
段一凡-华北理工大学2 小时前
工业智能体:从Codex/Claude到项目实战~系列文章05:从“AI助手“到“工业智能体“:能力跃迁与落地范式
人工智能·python·claude·codex·工业智能体·高炉炼铁智能化
深蓝AI2 小时前
ContextVar 到线程池就丢了?asyncio.to_thread 和 run_in_executor 实测
python
岁月宁静4 小时前
什么是 Agent:从"会聊天"到"会做事"
人工智能·python
岁月宁静4 小时前
AI 应用开发工程师简历怎么写:HR 初筛、技术复筛、面试追问,三道关卡各看什么?
人工智能·python·面试
来让爷抱一个4 小时前
Python 异步里混用同步库,事件循环被卡住的全过程
开发语言·python
小肝一下6 小时前
3.基础语法(3)
python
深蓝AI7 小时前
Python 子进程树:父进程被杀后,孙进程为何还在跑?
python
心祭丫丫7 小时前
【每天一个 Python 小案例17】Python 实现通讯录
开发语言·人工智能·笔记·python·学习
爱你真是太好了7 小时前
Skill 索引瘦身与渐进加载
python
贾公子7 小时前
检测链路的容量规划——用 Little's Law 算清 QPS、并发与积压
后端·python