python模块学习(collections模块)

本文介绍了Python 3.5.2版本中的collections模块,特别是defaultdict功能,它允许用户为字典设置默认值,确保在访问不存在的键时返回预设值,便于数据管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习版本3.5.2
1.namedtuple,是tuple的子类,字面意思可命名的元组,就是用来创建一个给各个元素都加上了key的tuple。
#/usr/bin/python3
# -*- utf-8 -*-
#学习版本3.5.2

import collections

if __name__ == "__main__":

    a = (1,2,3)
    newtuple = collections.namedtuple('newtuple',['a','b','c'])
    b = newtuple(1,2,3)

    print("a:",a)
    print("a[0]:",a[0])
    print("="*20)
    print("b:",b)
    print("b[0]:",b[0])
    print("b.a:",b.a)

运行结果
a: (1, 2, 3)
a[0]: 1
====================
b: newtuple(a=1, b=2, c=3)
b[0]: 1
b.a: 1

2.deque,是双端队列,类似list,但是它能在两端都快速的进行append和pop操作。
#/usr/bin/python3
# -*- utf-8 -*-
#学习版本3.5.2

import collections

if __name__ == "__main__":
    que = collections.deque([1,2,3]) #用list初始化que

    que.append(2)#在右侧插入2
    que.appendleft(3)#在左侧插入3
    print(que.count(2))#返回等于2的元素的数量
    que.extend(['a','b'])#把list里的元素一个一个插入到右侧
    que.extendleft(['c','d'])#把list里的元素一个一个插入到左侧
    print(que.index(2))#返回等于2的第一个位置
    que.insert(5,'g')#在5位置插入'g'
    que.pop()#删除右侧的第一个元素
    que.popleft()#删除左侧的第一个元素
    que.remove(2)#删除第一个等于2的元素
    que.reverse()#把que左右顺序颠倒
    que.rotate(3)#把que右侧的3个元素放到左侧
    que.clear()#清空que

3.ChainMap,map链,将dict放到一起来方便查询
#/usr/bin/python3
# -*- utf-8 -*-
#学习版本3.5.2

import collections

if __name__ == "__main__":
    dict1 = {'a':1,'b':2}
    dict2 = {'c':3,'d':4}

    #用dict1和dict2初始化chainmap
    chainmap = collections.ChainMap(dict1, dict2)
    print(chainmap)
    #获得key为a的value
    print(chainmap.get('a'))

    #获得一个新的chainmap并在左侧加上{'e',5}
    chainmap = chainmap.new_child({'e':5})
    print(chainmap)
    #chainmao.parents相当于去掉左侧的dict剩下的部分
    #删除最左侧dict中key为a的元素
    chainmap.parents.pop('a')
    print(chainmap)
    #删除最左侧dict中的第一个元素
    chainmap.parents.parents.popitem()
    print(chainmap)

运行结果

ChainMap({'b': 2, 'a': 1}, {'c': 3, 'd': 4})
1
ChainMap({'e': 5}, {'b': 2, 'a': 1}, {'c': 3, 'd': 4})
ChainMap({'e': 5}, {'b': 2}, {'c': 3, 'd': 4})
ChainMap({'e': 5}, {'b': 2}, {'d': 4})

4.Counter,继承了dict类,统计传入的序列中每一个元素出现的次数。

#/usr/bin/python3
# -*- utf-8 -*-
#学习版本3.5.2

import collections

if __name__ == "__main__":
    #用字符串初始化一个counter
    counter = collections.Counter("aababcabcd")
    print(counter)
    #most_common(n)列出counter中最常见的几个元素,参数为None时候列出所有元素
    print(counter.most_common(2))
    #update(...)添加元素
    counter.update('e')
    print(counter)
    counter.update('a')
    print(counter)
    #subtract(...)减少元素
    counter.subtract('e')
    print(counter)
    counter.subtract('e')
    print(counter)
    #counter支持+(加号)、-(减号)、&、|、+=、-=、&=、|=、+(正号)、-(负号)
    #+(正号)将counter中的次数为0和负的去掉了
    #-(负号)将counter中次数为0和正的去掉然后把负的全部变为正的
    print(-counter)
    print(+counter)

运行结果

Counter({'a': 4, 'b': 3, 'c': 2, 'd': 1})
[('a', 4), ('b', 3)]
Counter({'a': 4, 'b': 3, 'c': 2, 'd': 1, 'e': 1})
Counter({'a': 5, 'b': 3, 'c': 2, 'd': 1, 'e': 1})
Counter({'a': 5, 'b': 3, 'c': 2, 'd': 1, 'e': 0})
Counter({'a': 5, 'b': 3, 'c': 2, 'd': 1, 'e': -1})
Counter({'e': 1})
Counter({'a': 5, 'b': 3, 'c': 2, 'd': 1})

5.OrderedDict,有序字典是dict的子类,对字典的元素进行了排序的字典
#/usr/bin/python3
# -*- utf-8 -*-
#学习版本3.5.2

import collections

if __name__ == "__main__":
    odict = collections.OrderedDict()
    odict['a'] = 1
    odict['b'] = 2
    odict['c'] = 3
    print(odict)
    #items()返回键值对组成的列表
    print(odict.items())
    #keys()返回key组成的列表
    print(odict.keys())
    #values()返回value组成的列表
    print(odict.values())
    #move_to_end(key)把对应的key-value移到字典最后
    odict.move_to_end('b')
    print(odict)
    #pop(key)获取对应的value并把该键值对从字典删除
    print('b',odict.pop('b'))
    print(odict)
    #popitem()返回并删除最右边的元素
    print(odict.popitem())
    print(odict)
    #setdefault(key)返回对应key的value,如果key不存在则创建
    print('d',odict.setdefault('d'))
    print(odict)

运行结果

OrderedDict([('a', 1), ('b', 2), ('c', 3)])
odict_items([('a', 1), ('b', 2), ('c', 3)])
odict_keys(['a', 'b', 'c'])
odict_values([1, 2, 3])
OrderedDict([('a', 1), ('c', 3), ('b', 2)])
b 2
OrderedDict([('a', 1), ('c', 3)])
('c', 3)
OrderedDict([('a', 1)])
d None
OrderedDict([('a', 1), ('d', None)])

6.defaultdict,默认字典,将字典的value设置成默认值

#/usr/bin/python3
# -*- utf-8 -*-
#学习版本3.5.2

import collections

if __name__ == "__main__":
    #用list初始化defaultdict
    ddict = collections.defaultdict(list)
    ddict['a'].append(1)
    ddict['a'].append(2)
    ddict['b'].append(3)
    print(ddict)
    #用dict初始化defaultdict
    ddict = collections.defaultdict(dict)
    ddict['a'].update({'a1':1})
    ddict['a'].update({'b1':2})
    ddict['b'].update({'c1':3})
    print(ddict)
    #用collections.Counter初始化defaultdict
    ddict = collections.defaultdict(collections.Counter)
    ddict['a'].update('abc')
    ddict['a'].update('abcde')
    ddict['b'].update('abcd')
    print(ddict)
    #用lambda表达式初始化defaultdict
    ddict = collections.defaultdict(lambda: 1)
    ddict['a'] += 1
    ddict['b'] += 2
    print(ddict)

运行结果

defaultdict(<class 'list'>, {'a': [1, 2], 'b': [3]})
defaultdict(<class 'dict'>, {'a': {'b1': 2, 'a1': 1}, 'b': {'c1': 3}})
defaultdict(<class 'collections.Counter'>, {'a': Counter({'c': 2, 'a': 2, 'b': 2, 'd': 1, 'e': 1}), 'b': Counter({'d': 1, 'c': 1, 'a': 1, 'b': 1})})
defaultdict(<function <lambda> at 0x101a608c8>, {'a': 2, 'b': 3})

7.UserDict,UserList,UserString

这三个东西就是在对象的data变量里面拷贝了一份初始化的变量。。

这三的作用是让用户自己添加操作来对特定的数据进行管理

#/usr/bin/python3
# -*- utf-8 -*-
#学习版本3.5.2

import collections

if __name__ == "__main__":
    d = {'a':1,'b':2}
    myd = collections.UserDict(d)
    d.update({'c':3})
    print(d)
    print(myd.data)

    l = [1,2]
    myl = collections.UserList(l)
    l.append(3)
    print(l)
    print(myl.data)

    s = 'abc'
    mys = collections.UserString(s)
    s = s + 'de'
    print(s)
    print(mys.data)

运行结果
{'c': 3, 'a': 1, 'b': 2}
{'a': 1, 'b': 2}
[1, 2, 3]
[1, 2]
abcde
abc



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值