大家应该都知道python字典背后的实现是依靠散列表的,散列表可真是个好东西,可以以极快的速度获取内存上的数据,但是任何强大的东西背后都是有做出牺牲的,比如散列表就是一个典型的以空间换时间的数据结构,散列表存储并不会将数组存满,而是会留存大概三分之一左右的内存不存任何数据,这就导致了我们在实际开发中如果遇到了要存储千万上亿级别的数据的时候,python的字典就会造成大量的内存浪费(如果你的设备内存足够大当我没说);
所以我们更希望在不造成大面积空间浪费的情况下而又能快速拿到数据,元组的重要性就体现出来了,下面以简短的代码表述一下普通元组和具名元组当成字典用:
一、普通元组
tuple1=[
('chn',20,'男'),
('chb',18,'女'),
('ch',13,'男')
]
#元组是不可变的,同时上面这个元组不能能过属性名称来获取数据
#要么普通的通过下标取数据,例如:
print(tuple1[0][1]) #20
print(tuple[0][0]) #chn
#或者用拆包,这样就比较像对象取数据了
name,age,sex=range(0,3)
print(tuple[0][name]) #chn
print(tuple[1][sex]) #女
当然,模块collections提供了具名元组,使得无需拆包,直接通过具名取数据
二、具名元组
#具名元组
namedTuple=[
('chn',20,'男'),
('chb',18,'女'),
('ch',13,'男')
]
named=collections.namedtuple('Person','name age sex')
namesd=[named(*item) for item in namedTuple]
print(namesd)
#结果:
#[Person(name='chn', age=20, sex='男'), Person(name='chb', age=18, sex='女'), #Person(name='ch', age=13, sex='男')]
print(namesd[0][name])
#结果:
#chn