collection系列功能介绍
1. 常用的集中类
1. Counter(计数器)
计数器的常用方法如下:
-
创建一个字典计数器
格式:collections.Counter(obj) 例如:print(collections.Counter('abcab')) >>> Counter({'a': 2, 'c': 2, 'b': 1}) 返回值:collections.Counter #把传入的字符串进行单个字符拆分,字符作为字典计数器的key,字符出现的个数作为字典计数器的value。 print(collections.Counter([1,2,3,2,3])) >>> Counter({1: 1, 2: 2, 3: 2}) 返回值:collections.Counter #把元祖的元素进行统计,返回每个元素的个数。 print(collections.Counter((1,2,3,1,3))) >>> Counter({1: 2, 2: 1, 3: 2}) 返回值:collections.Counter #把元祖的元素进行统计,返回每个元素的个数。 print(collections.Counter({1,2,3})) >>> Counter({1: 1, 2: 1, 3: 1}) 返回值:collections.Counter #统计集合中元素的个数,由于集合天生除重,因此每个元素的个数均为1。 print(collections.Counter({'a':'b','b':'c'})) >>> Counter({'b': 'c', 'a': 'b'}) 返回值:collections.Counter #当参数为字典时,返回值不再是统计个数。
注:由于该类是对字典的增强,因此字典拥有的方法,该类都有。
-
clear(清空字典计数器)
格式:collections.Counter(obj).clear() 例如:print(collections.Counter('abcab').clear()) >>> Counter() 返回值:collections.Counter #对原字典计数器进行操作,清空所有元素。
-
copy(复制)
格式:collections.Counter(obj).copy() 例如:print(collections.Counter('abccc').copy()) >>> Counter({'c': 3, 'a': 1, 'b': 1}) 返回值:collections.Counter #复制一个字典计数器
-
elements(成员)
格式:collections.Counter(obj).elements() 例如:print(collections.Counter('abccc').elements()) >>> itertools.chain object at 0x0000000000D26518 返回值:itertools.chain for i in collections.Counter('abccc').elements(): print(i) >>> 'a' >>> 'b' >>> 'c' #获取成员后生成一个迭代器,遍历时得到的是字典计数器中的key。
-
get(获取字典计数器的值)
格式:collections.Counter(obj).get(key[,value]) 例如:print(collections.Counter('abccc').get('c')) >>> 3 print(collections.Counter('abccc').get('d','adc')) >>> 'adc' 返回值:obj #获取字典计数器指定key的value,如果key不存在时,可以指定key的value。
-
items(所有的键值对)
格式:collections.Counter(obj).items() 例如:print(collections.Counter('abccc').items()) >>> dict_items([('a', 1), ('c', 3), ('b', 1)]) 返回值:dict_items #获取字典计数器的键值对,每对字典计数器的key和value作为一个元祖的两个元素,该元祖又作为列表的元素返回。可以通过遍历获取字典计数器的key和value。
-
keys(所有的键)
格式:collections.Counter(obj).keys() 例如:print(collections.Counter('abccc').keys()) >>> dict_keys(['a', 'c', 'b']) 返回值:dict_keys #把字典计数器中所有的key作为列表的元素返回。
-
most_common(取前面的N个元素)
格式:collections.Counter(obj).most_common(number) 例如:print(collections.Counter('abccc').most_common()) >>> [('c', 3), ('a', 1), ('b', 1)] print(collections.Counter('abccc').most_common(1)) >>> [('c', 3)] 返回值:list #把每对key和value作为元祖的两个元素,该元祖又作为列表的元组返回,对返回的列表进行排序,默认倒序,参考依据为列表中元祖的第二个元素,也就是原字典计数器中元素的个数。
-
pop(指定键删除字典计数器的值)
格式:collections.Counter(obj).pop(key[,value]) 例如:print(collections.Counter('abccc').pop('a')) >>> 1 print(collections.Counter('abccc').pop('d',5)) >>> 5 返回值:obj #指定字典计数器的key进行删除,同时返回被删除的value,当key不存在时,如果不指定value,程序将报错,当指定value时,将返回value。
-
popitem(随机删一对键值对)
格式:collections.Counter(obj).popitem() 例如:print(collections.Counter('abccc').popitem()) >>> ('a',1) 返回值:tuple #随机删除一对键值对,并以元祖的形式返回被删除的键值对。
-
setdefault(默认字典计数器)
格式:collections.Counter(obj).setdefault(key[,value]) 例如:print(collections.Counter('abccc').setdefault('a')) >>> 1 print(collections.Counter('abccc').setdefault('a',6)) >>> 1 print(collections.Counter('abccc').setdefault('d')) >>> None print(collections.Counter('abccc').setdefault('e',5)) >>> 5 返回值:obj #设置字典计数器的默认value,当该key存在时,该操作不改变原字典计数器,当key不存在时,如果不知道value,则默认为None,如果指定value,则字典新增key的值即为value。
-
subtract(减去)
格式:collections.Counter(obj).subtract(*args,**kwargs) 例如:sub = collections.Counter('abccc') print(sub) >>> Counter({'c': 3, 'a': 1, 'b': 1}) sub1 = sub.subtract('a') print(sub1) >>> None print(sub) >>> Counter({'c': 3, 'b': 1, 'a': 0}) 返回值:None sub2 = sub.subtract('d') print(sub) >>> Counter({'c': 3, 'b': 1, 'a': 0, 'd': -1}) sub3 = sub.subtract(('b',3)) >>> Counter({'c': 3, 'a': 0, 'b': 0, 'd': -1, 3: -1}) sub4 = sub.subtract({'a':2}) >>> Counter({'c': 3, 'b': 0, 'd': -1, 3: -1, 'a': -2}) #更新原字典计数器,如果传入的参数为字符串,那么该字符串将作为字典计数器的key,如果该key存在,则直接key对于的value减去1,当key不存在,则新增一对键值对,value为-1,当传入的参数为元祖时,元祖的元素均作为key更新原字典计数器,如果传入的参数为字典计数器时,如果有key相同,则value直接相减,如果key不同,则value为-value。
-
update(更新字典计数器)
格式:collections.Counter(obj) 返回值:None #该方法为相加与subtract刚好相反,具体实例参考上述方法。
-
values(所有的值)
格式:collections.Counter(obj).values() 例如:print(collections.Counter('abccc').values()) >>> dict_values([1, 3, 1]) 返回值:dict_values #把字典计数器中所有的value作为列表的元素返回。
2.OrderedDict(有序字典)
有序字典的常用方法如下:
-
创建一个有序字典
格式:collections.OrderedDict(variable=value) 例如:print(collections.OrderedDict(a='abcd')) >>> OrderedDict([('a', 'abcd')]) 格式:collections.OrderedDict(dict) 例如:print(collections.OrderedDict({'a':'ab','b':'bc'})) >>> OrderedDict([('b', 'bc'), ('a', 'ab')]) 返回值:collections.OrderedDict #创建一个有序的字典常用的还是第二种,第一种方法一次只能创建一对键值对的有序字典。
注:有序字典的键值对和字典不一样,有序字典的键值对是以元祖的形式存在,但字典所拥有的功能,有序字典也有。
-
clear(清空字典)
格式:collections.OrderecDict(dict).clear() 例如:print(collections.OrderedDict({'a':'ab','b':'bc'}).clear()) >>> None 返回值:None #把原有序字典进行清空
-
copy(复制)
格式:collections.OrderedDict(dict).copy() 例如:print(collections.OrderedDict({'a':'ab','b':'bc'}).copy()) >>> OrderedDict([('b', 'bc'), ('a', 'ab')]) 返回值:collections.OrderedDict #复制原有序字典,生成新的一个有序字典。
-
fromkeys(创建值相同的新有序字典)
格式:collections.OrderedDict(dict).fromkeys(obj[,value]) 例如:print(collections.OrderedDict({'a':'ab','b':'bc'}).fromkeys('xyz')) >>> OrderedDict([('x', None), ('y', None), ('z', None)]) 返回值:collections.OrderedDict #创建新默认有序字典,顺序从左到右,传入的第一个参数(int类除外)将作为新有序字典的key,当第一个参数为字典时,将只取其key作为新有序字典的key,第二个参数为新有序字典的value,默认为None。
注:创建新有序字典时,元素的位置为传入时的,从左到右。
-
get(获取有序字典的值)
格式:collections.OrderedDict(dict).get(k[,value]) 例如:print(collections.OrderedDict({'a':'ab','b':'bc'}).get('c','xx')) >>> 'xx' 返回值:obj #当指定获取有序字典的key时,如果key存在,将直接返回有序字典的value,忽略第二个参数,当key不存在时,将直接返回传入的第二个参数,默认为None。
-
items(获取有序字典的键值对)
格式:collections.OrderedDict(dict).items() 例如:print(collections.OrderedDict({'a':'ab','b':'bc'}).items()) >>> odict_items([('b', 'bc'), ('a', 'ab')]) 返回值:odict_items #由于有序字典里面其实也是一个列表,因此该方法获取到的内容和元素和有序字典的元素是一样的。
-
keys(获取有序字典所有的键)
格式:collections.OrderedDict(dict).keys() 例如:print(collections.OrderedDict({'a':'ab','b':'bc'}).keys() >>> odict_keys(['b', 'a']) 返回值:odict_keys #把有序字典所有的key作为列表的元素返回。
-
movetoend(指定键的键值对移动到末尾)
格式:collections.OrderedDict(dict).move_to_end(key) 例如:print(collections.OrderedDict({'a':'ab','b':'bc'}).move_to_end('a')) >>> None 返回值:None #该方法直接操作原有序字典,指定key的键值对将移动到有序字典的最右边,如果该键值对已在有序字典的最右边,程序也不会报错。
-
pop(删除指定键的键值对)
格式:collections.OrderedDict(dict).pop(key[,value]) 例如:print(collections.OrderedDict({'a':'ab','b':'bc'}).pop('a')) >>> 'ab' 返回值:obj #删除指定key的键值对,并返回该键值对的value,当key存在时,将返回key对应的value,当key不存在时,如果指定第二个参数将返回第二个参数,否则将报错。
-
popitem(删除最右边的键值对)
格式:collections.OrderedDict(dict).popitem() 例如:print(collections.OrderedDict({'a':'ab','b':'bc'}).popitem()) >>> ('a', 'ab') 返回值:tuple #删除有序字典最右边的键值对,并返回该键值对,由于有序字典的键值对是一元祖的形式存在,因此返回的类型为元祖类型。
-
setdefault(设置默认有序字典)
格式:collections.OrderedDict(dict).setdefault(key[,value]) 例如:print(collections.OrderedDict({'a':'ab','b':'bc'}).setdefault('a')) >>> 'ab' 返回值:obj #设置有序字典的默认value,当key存在时,将不进行修改,当key不存在时,第二个参数将作为新key的默认value,当不指定第二个参数时,默认value为None。
-
update(更新有序字典)
格式:collections.OrderedDict(dict).update(dict) 例如:print(collections.OrderedDict({'a':'ab','b':'bc'}).update({'c':'cd'})) >>> None 返回值:None #更新原有序字典,传入参数的字典的键值对作为有序字典的元祖。
-
values(获取有序字典所有的值)
格式:collections.OrderedDict(dict).values() 例如:print(collections.OrderedDict({'a':'ab','b':'bc'}).values()) >>> odict_values(['bc', 'ab']) 返回值:odict_values #把有序字典所有的values作为列表的元素返回。
3. defaultdict(默认字典)
格式:collections.defaultdict(type)
例如:dic_l = collections.defaultdict(list)#创建一个空的默认字典,默认值的类型为list。
dic['k1'].append(1)
print(dic)
>>> defaultdict(<class 'list'>, {'k1':[1]})
返回值:defaultdict(<class 'list'>, {})
#可以设置默认字典默认值的类型为list、tuple、dict和set,添加键值对时,就可以调用相应类的方法。由于其方法与字典和有序字典一样,因此这里不做详细介绍。
4. namedtuple(可命名元祖)
由于该系列没有定义该类,需要手动创建类。
-
创建类
格式:name = collections.namedtuple('name',type) tu = name(obj) 例如:name_tuple = collections.namedtuple('name_tuple',['x','y','z']) tu = name_tuple(1,3,4) print(tu) >>> name_tuple(x=1,y=3,z=4) #定义该类时,指定类的名字和元祖元素的名字的类型,常用list和tuple,因为dict和set是无序的,因此在传入参数时不能按照定义类时,元祖元素的名字一致。
注:定义类时,指定元祖元素名字的类型时,其个数与创建元祖时需要一致,当定义的类型为dict时,只取dict的key。
-
调用方法
例如:print(tu.x) >>> 1 print(tu[2]) >>> 4 #一般元祖获取元素时,只能通过切片的方法,但如果不知道该元素的下标时,将无法获取,该方法就是通过命名直接获取,无需知道元素的下标,当然也是可以切片方法获取。由于元祖不可能修改,因此方法只有index和count两种,由于这两种方法的参数是value,因此这里也不做详细介绍。
5. deque(双向队列)
-
创建双向队列
格式:collections.deque(obj[,maxlen]) 例如:print(collections.deque())#创建空队列 >>> deque([]) 返回值:collections.deque print(collections.deque('abc'))#元素为字符串的队列,未指定最大长度 >>> deque(['a', 'b', 'c']) print(collections.deque('abc',2))#指定最大长度 >>> deque(['b', 'c'], maxlen=2) #当指定最大长度时,如果队列长度大于限定的最大长度时,将删除最先传入的元素。 print(collections.deque([1,2,3,4],5))#元素为列表的队列 >>> deque([1, 2, 3, 4], maxlen=5) #当限定的最大长度大于队列的实际长度时,将不会增加默认元素。
-
append(右边添加元素)
格式:collections.deque(obj[,maxlen]).append(obj) 例如:que = collections.deque([1,2,3,4],5) print(que.append((1,2,3,))) >>> None 返回值:None print(que) >>> deque([1, 2, 3, 4, (1, 2, 3)], maxlen=5) #直接在原队列的最右边添加,传入的参数可以是int类型,而且传入的参数作为一个整体传入到队列中,如果超出限定的最大长度时,将删除最左边的元素。
-
appendleft(左边添加元素)
格式:collections.deque(obj[,maxlen]).appendleft(obj) 例如:que = collections.deque([1,2,3,4],5) print(que.appendleft((1,2,3,))) >>> None 返回值:None print(que) >>> deque([(1, 2, 3), 1, 2, 3, 4], maxlen=5) #直接在原队列的最左边添加,传入的参数可以是int类型,而且传入的参数作为一个整体传入到队列中,如果超出限定的最大长度时,将删除最右边的元素。
-
clear(清空队列)
格式:collections.deque(obj[,maxlen]).clear() 例如:que = collections.deque([1,2,3,4],5) print(que.clear()) >>> None 返回值:None print(que) >>> deque([], maxlen=5) #清空原队列。
-
copy(复制队列)
格式:collections.deque(obj[,maxlen]).copy() 例如:que = collections.deque([1,2,3,4],5) print(que.copy()) >>> deque([1, 2, 3, 4], maxlen=5) 返回值:collections.deque #复制原队列,生成一个新队列。
-
count(计数)
格式:collections.deque(obj[,maxlen]).count(value) 例如:que = collections.deque([1,2,3,4],5) print(que.count(2)) >>> 1 返回值:int #统计队列中元素的个数。
-
extend(扩展队列)
格式:collections.deque(obj[,maxlen]).extend(obj) 例如:que = collections.deque([1,2,3,4],5) print(que.extend('abc')) >>> None 返回值:None print(que) >>> deque([3, 4, 'a', 'b', 'c'], maxlen=5) #扩展也是在队列的最右边进行扩展,如果队列长度超出最大限度长度,将删除队列最左边的元素。
-
index(查找元素下标)
格式:collections.deque(obj[,maxlen]).index(value[start,[stop]]) 例如:que = collections.deque([1,2,3,4],5) print(que.index(4)) >>> 3 返回值:int #返回元素的下标,可以指定开始和结束范围,当元素不存在时,程序报错。
-
insert(插入)
格式:collections.deque(obj[,maxlen]).insert(index,obj) 例如:que = collections.deque([1,2,3,4],5) print(que.insert(3,'abc')) >>> None 返回值:None print(que) >>> deque([1, 2, 3, 'abc', 4], maxlen=5) #指定位置插入元素,直接修改原队列。
-
pop(删除最右边的元素)
格式:collections.deque(obj[,maxlen]).pop() 例如:que = collections.deque([1,2,3,4],5) print(que.pop()) >>> 4 返回值:obj #删除原队列最右边的元素,同时返回删除的对象。
-
popleft(删除最左边的元素)
格式:collections.deque(obj[,maxlen]).popleft() 例如:que = collections.deque([1,2,3,4],5) print(que.popleft()) >>> 1 返回值:obj #删除原队列最左边的元素,同时返回删除的对象。
-
remove(删除指定元素)
格式:collections.deque(obj[,maxlen]).remove(value) 例如:que = collections.deque([1,2,3,4],5) print(que.remove(4)) >>> None 返回值:None #直接删除原队列中指定的元素。
-
reverse(反转)
格式:collections.deque(obj[,maxlen]).reverse() 例如:que = collections.deque([1,2,3,4],5) print(que.reverse()) >>> None 返回值:None print(que) >>> deque([4, 3, 2, 1], maxlen=5) #直接对原队列进行反转排序。
-
rotate(元素位置移动)
格式:collections.deque(obj[,maxlen]).rotate(number) 例如:que = collections.deque([1,2,3,4],5) print(que.rotate(2)) >>> None 返回值:None print(que) >>> deque([3, 4, 1, 2], maxlen=5) #把元素从左边移动到右边,默认一次只移动一步,属于整体移动,所以最右边的将移动到最左边。
-
maxlen(最大长度)
格式:collections.deque(obj[,maxlen]).maxlen 例如:que = collections.deque([1,2,3,4],5) print(que.maxlen) >>> 5 返回值:int #当不限定最大长度时,该返回值为None。
注:该方法为队列的变量,并不是函数,因此不能被调用。