[00018]映射名称到序列元素

映射名称到序列元素

一、 解决问题

通过下标访问列表或者元组中元素的代码,有时候会使得你的代码难以
阅读,于是你想通过名称来访问元素。

二、解决方案

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')

四、关联知识

  1. collections模块:传送门,待补充

五、总结

  1. 当查询数据库数据量大的时候,可以使用命名元组替换字典结构
  2. 命名字典不适用更新量大的操作,尽管提供了_replace(**kargs)

六、代码地址

github地址:https://github.com/weichen666/python_cookbook
目录/文件:first_selection/learn_collection_nametuple.py

七、参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值