collections模块之namedtuple

167 阅读1分钟

namedtuple又称为具名元组,因为一般的元组tuple无法对数据进行命名,所以无从知晓元组的意义。这里引入namedtuple来构造一个带名字的元组,就是为解决这类问题。

1.定义

namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)

typename:元组的名称

field_names:元组中元素的名称

rename:如果元素名称含有python关键字,则必须设置rename=True

2.实例化方法

具名元组有2种实例化方法,下面进行介绍

2.1实例化方法1

from collections import namedtuple
​
Point = namedtuple("point", ["x", "y", "z"])
p = Point(3, 4, 5)
print(p)

result:

point(x=3, y=4, z=5)

2.2实例化方法2

from collections import namedtuple
​
Point = namedtuple("point", "x y z")
p = Point(3, 4, 5)
print(p)

result:

point(x=3, y=4, z=5)

创建一个具名元组,需要两个参数,一个是类名,另一个是类的各个字段名。后者可以是有多个字符串组成的可迭代对象,或者是有空格分隔开的字段名组成的字符串。具名元组可以通过字段名或者位置来获取一个字段的信息。

3.方法属性介绍

3.1 访问成员

from collections import namedtuple
​
Point = namedtuple("point", "x y z")
p = Point(3, 4, 5)
print(p.x)
print(p.z)

result:

3
5

3.2 查看字段列表

from collections import namedtuple
​
Point = namedtuple("point", "x y z")
p = Point(3, 4, 5)
print(p._fields)

result:

('x', 'y', 'z')

3.3 替换成员值

from collections import namedtuple
​
Point = namedtuple("point", "x y z")
p = Point(3, 4, 5)
print(p._replace(x=6, y=8, z=10))

result:

point(x=6, y=8, z=10)

3.4 转换为字典

from collections import namedtuple
​
Point = namedtuple("point", "x y z")
p = Point(3, 4, 5)
print(p._asdict())

result:

OrderedDict([('x', 3), ('y', 4), ('z', 5)])

4.继承

from collections import namedtuple
​
Food = namedtuple('food', ['name', 'color'])
bread = Food(name='bread',color='brown')
print(bread)

result:

food(name='bread', color='brown')