python:collections模块 — 容器数据类型

参考文档:collections --- 容器数据类型 — Python 3.10.1 文档

简介

这个模块实现了特定目标的容器,提供了python标准内建容器dict, list, set和tuple的替代选择

namedtuple() 创建命名元组子类的工厂函数
deque 类似列表(list)的容器,实现了在两端快速的添加(append)和弹出(pop)
ChainMap 类似字典(dict)的容器类,将多个映射集合到一个视图里面
Counter 字典的子类,提供了可哈希对象的计数功能
OrderedDict 字典的子类,保存了他们被添加的顺序
defaultdict 字典的子类,提供了一个工厂函数,为字典查询提供了一个默认值
UserDict 封装了字典对象,简化了字典子类化
UserList 封装了列表对象,简化了列表子类化
UserString 封装了字符串对象,简化了字符串子类化

1. namedtuple() 命名元组的工厂函数

使用示例:

>>> Point = namedtuple('Point', ['x', 'y'])
>>> p = Point(11, y=22)          # 用位置参数或者关键字参数实例化
>>> p[0] + p[1]                  # 索引取值
33
>>> x,y = p                      # 解包
>>> x,y
(11, 22)
>>> p.x+p.y                      # 字段名获取值
33
>>> p                            # __repr__
Point(x=11, y=22)

collecitons.namedtuple(typename, field_name, *, rename=False, defaults=None, module=None)

        返回一个新的元组子类,名为typaname

        field_name: 字段名,可以是一个像['x', 'y']一样的字符串序列,也可以是一个纯字符串,用空白或者逗号分隔开元素名,比如‘x y’ 或者‘x, y’

        rename:如果为真,无效字段名会自动传换成位置名。比如['abc', 'def', 'abc']转换成[

'abc', '_1', '_2']

        defaults: 可以为None,或者是一个默认值的iterable。作为字段默认值出现,如果defaults为iterable,且长度小于字field_name的长度,那么defaults就应用到最右边的参数。比如field_name为['x', 'y', 'z'],default为(1,2),那么x就必须指定一个参数值,y默认值为1,z默认值2.

        module: 如果module值有定义,命名元组的__module__属性值就被设置

用于赋值 csv sqlite3 模块返回的元组示例:

EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')

import csv
for emp in map(EmployeeRecord._make, csv.reader(open("employees.csv", "rb"))):
    print(emp.name, emp.title)

import sqlite3
conn = sqlite3.connect('/companydata')
cursor = conn.cursor()
cursor.execute('SELECT name, age, title, department, paygrade FROM employees')
for emp in map(EmployeeRecord._make, cursor.fetchall()):
    print(emp.name, emp.title)

   namedtuple支持的三个方法和两个属性

somenamedtuple._make(iterable)   
# 从存在的序列或迭代实例创建一个新实例

somenamedtuple._asdict()         
# 返回一个新dict,将值映射到字段名

somenamedtuple._replace(**kwargs) 
# 返回一个新的命名元组实例,并将指定域替换为新的值

somenamedtuple._fields   
# 列出字段名

somenamedtuple._field_defaults   
# 将字段名映射到默认值

方法和属性使用示例:

>>> t = [11, 22]
>>> Point._make(t)          # _make(iterable)
Point(x=11, y=22)

>>> p = Point(x=11, y=22)
>>> p._asdict()             # _asdict()
{'x':11, 'y':22}

>>> p._replace(x=33)        # _replace(**kwargs)
Point(x=33, y=22)


>>> for partnum, record in inventory.item():
        inventory[partnum] = record._replace(price=newprices[partnum], timestamp=time.now()) 

>>>p._fields        # _fields
('x', 'y')
>>> Color = namedtuple('Color', ['red', 'green', 'blue'])
>>> Pixel = namedtuple('Pixel', Point._fields + Color._fields)
>>> Pixel(11, 22, 128, 255, 0)
Pixel(x=11, y=22m red=128, green=255, blue=0)


>>> Account = namedtuple('Account
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值