关于一些 特殊数据类型的模块
namedtuple顾名思义,一个带有名字的元祖,他也是跟对象有关的一个
from collections import namedtuple phone = namedtuple('Phone', ['x','y']) p = phone(1,2) print(p.x) print(p.y)
语法:
变量名 = namedtuple(‘名称’,['相当于字典里的key,可以写很多'])
Orderdict 顾名思义,带有顺序的字典。
正常的命名一个字典的语法格式
d = dict([('1', 'a'), ('3', 'b'), ('2', 'c'), ('5', 'd'), ('4', 'e'), ('6', 'f')]) print(d)
这就是正常的命名一个字典,用内置函数dict,这样命名的字典,我们都知道是无序的。接下来,明明一个有序的字典,其实,就是把前面的dict,换成了Orderdict。
from collections import OrderedDict d = OrderedDict([('a', 1), ('b', 2), ('c', 3)]) print(d) for i in d: print(i)
defaultdict
有如下值集合 [
11
,
22
,
33
,
44
,
55
,
66
,
77
,
88
,
99
,
90.
..],将所有大于
66
的值保存至字典的第一个key中,将小于
66
的值保存至第二个key的值中。
即: {
'k1'
: 大于
66
,
'k2'
: 小于
66
}
values = [11, 22, 33,44,55,66,77,88,99,90] my_dict = {} for value in values: if value>66: if my_dict.has_key('k1'): my_dict['k1'].append(value) else: my_dict['k1'] = [value] else: if my_dict.has_key('k2'): my_dict['k2'].append(value) else: my_dict['k2'] = [value]
from collections import defaultdict values = [11, 22, 33,44,55,66,77,88,99,90] my_dict = defaultdict(list) for value in values: if value>66: my_dict['k1'].append(value) else: my_dict['k2'].append(value)
Counter
Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似。
deque
使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。