python 中的tuple是一个非常高效的集合对象,但是我们只能通过索引的方式访问集合的元素。
例如:
其中desk[0],desk[1],desk[2]就是用索引访问的方式。如果tuple中元素很多,操作起来就比较麻烦了,很容易由于索引错误导致错误。现在让我们来看看namedtuple对象的用法,你可以给tuple命名。
例如:
In[22]: from collections import namedtuple
In[23]: person=namedtuple("person","name age sex")
In[24]: desk=person(name="desk",age=17,sex="boy")
In[25]: lee=person(name="lee",age=18,sex="boy")
In[28]: for std in [desk,lee]:
... print std.name,std.age,std.sex
...
desk 17 boy
lee 18 boy
来解释一下namedtuple的几个参数,"person"是这个namedtuple的名称,后面的“name age sex”这个字符串用空格分隔,代表三个元素,分别为name,age,sex。我们在创建这个结构的tuple的时候就可以使用person定义好的格式,分别对每个元素赋值了。
注意事项:
在使用namedtuple的时候,定义元素的时候不能使用python中的关键字,比如:def,class等,而且也不能有重复的元素,比如:不能有两个"name name"。如果不能保证元素中有python关键字,需要将namedtuple的重命名模式打开,这样如果遇到python关键字或者有重复元素名时,自动进行重命名。
In[29]: with_class = namedtuple("person","name age class sex",rename=True)
In[30]: print with_class
<class '__main__.person'>
In[31]: print with_class._fields
('name', 'age', '_2', 'sex')
In[32]: two_ages = namedtuple("person","name age age sex",rename=True)
In[33]: two_ages._fields
Out[33]: ('name', 'age', '_2', 'sex')
使用rename=True的方式打开重命名选项