映射名称到序列元素
一、 解决问题
通过下标访问列表或者元组中元素的代码,有时候会使得你的代码难以
阅读,于是你想通过名称来访问元素。
二、解决方案
collections.namedtuple()
传递一个类型名和你需要的字段给它,然后它就会返回一个类;
你可以初始化这个类,为你定义的字段传递值
三、代码说明
# 支持所有普通元组的操作,比如索引和解压
from collections import namedtuple
Subscriber = namedtuple('Subscriber', ['addr', 'joined'])
sub = Subscriber("xxx@xxx.com", '2017-01-05')
print (sub) #->Subscriber(addr='xxx@xxx.com', joined='2017-01-05')
print (sub.addr) #->xxx@xxx.com
print (sub.joined) #->2017-01-05
#索引
print (sub[0]) #->xxx@xxx.com
#解压
addr, joined = sub
print(joined) #->2017-01-05
#用途(数据库中替代,如果数量巨大的话,比字典结构还有高效,但是命名元组是不可以更改的)
sub[0] = 'wsx@xx.com' #->异常 'Subscriber' object does not support item assignment
#如果非要修改的话,可以使用_replace() 方法,它会创建一个全新的命名元组并用新值取代
s = sub._replace(addr='wsx@xx.com')
print (s) #->Subscriber(addr='wsx@xx.com', joined='2017-01-05')
四、关联知识
- collections模块:传送门,待补充
五、总结
- 当查询数据库数据量大的时候,可以使用命名元组替换字典结构
- 命名字典不适用更新量大的操作,尽管提供了_replace(**kargs)
六、代码地址
github地址:https://github.com/weichen666/python_cookbook
目录/文件:first_selection/learn_collection_nametuple.py