【python】内建模块 collections 小结: namedtuple、deque、OrderedDict、defaultdict、Counter

本文深入讲解了Python中collections模块提供的几种高级数据类型,包括namedtuple, deque, Counter, OrderedDict和defaultdict的功能及使用方法,帮助读者理解如何在特定场景下更高效地利用这些数据结构。

Python内置了一些常用的数据类型,如str, int, list, tuple, dict等,而collections模块则在这个基础上提供了几个额外的小众的数据类型,在一些场景下会达到事半功倍的效果。具体如下:

数据类型功能
namedtuple()生成可以使用名字来访问元素内容的tuple子类
deque()双端队列,可以快速的从另外一侧追加和推出对象
Counter()计数器,主要用来计数
OrderedDict()有序字典
defaultdict()带有默认值的字典

namedtuple

功能

有名字的tuple。tuple只能通过索引的方式调用,而namedtuple可以根据属性调用。即 tuple的不变性 + 属性引用

使用方法
定义: 类名 = namedtuple('数据类型名' ,['属性1''属性2''属性3''属性4',...])
实例化: 实例对象 = 类名(属性1的值,属性2的值,...)
调用: 实例对象.属性2
例 1

定义一个坐标 p(x,y),想通过p.x获取横坐标,p.y 获取纵坐标,怎么办呢?定义一个类可以,但有点小题大做。可以这样:

from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)

调用:

>>> p
Point(x=1, y=2)
>>> p.x
1
>>> p.y
2

不可赋值

>>> p.x = 3
Traceback (most recent call last):
  File "<ipython-input-25-54b6a9d37b64>", line 1, in <module>
    p.x = 3
AttributeError: can't set attribute

可调用不可赋值:此时p是Point类的一个实例对象,可用类属性的方式调用。但namedtuple本质还是一个tuple,故属性值不可变。

可以验证创建的Point对象是tuple的一种子类:

>>> isinstance(p, Point)
True
>>> isinstance(p, tuple)
True
例 2
from collections import namedtuple

websites = [ ('Sohu', 'http://www.sohu.com/', u'张朝阳'),
             ('Sina', 'http://www.sina.com.cn/', u'王志东'),
             ('163', 'http://www.163.com/', u'丁磊') ]

# 用namedtuple自定义一个Website类
Website = namedtuple('Website', ['name', 'url', 'founder'])

for website in websites:
    website = Website._make(website) # ._make():把tuple装进去,即实例化
    print(website)
    print(website.name)
    print(website.url)
    print(website.founder)

输出

[Out]:
Website(name='Sohu', url='http://www.sohu.com/', founder='张朝阳')
Sohu
http://www.google.com/
张朝阳

Website(name='Sina', url='http://www.sina.com.cn/', founder='王志东')
Sina
http://www.sina.com.cn/
王志东

Website(name='163', url='http://www.163.com/', founder='丁磊')
163
http://www.163.com/
丁磊

未完待续。。。


Ref:
collections - 廖雪峰的官方网站
不可不知的Python模块: collections
容器(Collections)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值