文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么使用Python内置库collections

2023-06-02 02:51

关注

这篇文章主要讲解了“怎么使用Python内置库collections”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Python内置库collections”吧!

Python中有很多好用的内置的模块,比如datatime、json等等,本文介绍下collections模块的使用。使用collections模块时,首先要导入模块,如下所示:

import collections

我们首先介绍下OrderedDict模块的使用。在Python3.5(含)中字典是无序的,即不会按照使用者插入的顺序排序,如下所示,打印结果我们发现输出并没有按输入的顺序输出。

x = dict() # 无序字典x['stock1'] = "600213"x['stock2'] = "600223"x['stock3'] = "600233"print(x) # {'stock1': '600213', 'stock3': '600233', 'stock2': '600223'}

使用operator.itemgetter对字典排序后,返回的是一个list变量,而不是字典,倘若再将这个list转换为字典后,会发现又变回了无序字典。如下所示:

x = {"stock1": "600213", "stock2": "600223", "stock3": "600233"}sorted_x = sorted(x.items(), key=operator.itemgetter(0))print(type(x)) # <class 'dict'>print(type(sorted_x)) # <class 'list'>print(dict(sorted_x)) # {'stock1': '600213', 'stock3': '600233', 'stock2': '600223'}

如果要使字典保持我们插入的顺序怎么办呢?可以用collections.OrderedDict来初始化字典,使无序字典成为有序字典,如下所示:

x = OrderedDict()x['stock1'] = "600213"x['stock2'] = "600223"x['stock3'] = "600233"print(x) # OrderedDict([('stock1', '600213'), ('stock2', '600223'), ('stock3', '600233')])print(type(x)) # <class 'collections.OrderedDict'>

OrderedDict生成的字典支持如下属性:

# values() 获取字典所有的value,返回一个列表print(x.values()) # odict_values(['600213', '600223', '600233'])# setdefault() 获取指定key的value,如果key不存在,则创建val = x.setdefault('stock4')print(val, x) # None OrderedDict([('stock1', '600213'), ('stock2', '600223'), ('stock3', '600233'), ('stock4', None)])# popitem() 按照后进先出原则,删除最后加入的元素,返回key-valueprint(x.popitem(), x) # ('stock4', None) OrderedDict([('stock1', '600213'), ('stock2', '600223'), ('stock3', '600233')])# pop() 获取指定key的value,并在字典中删除k = x.pop('stock1')print(k, x) # 600213 OrderedDict([('stock2', '600223'), ('stock3', '600233')])# keys() 获取字典所有的keyprint(x.keys())# clear() 清空有序字典#x.clear()# copy() 拷贝new_dic = x.copy()print(new_dic)# items(返回由“键值对组成元素“的列表)print(x.items())# fromkeys() 指定一个列表,把列表中的值作为字典的key, 生成一个字典dic = OrderedDict()name = ['allen', 'belln', 'cllen']print(dic.fromkeys(name)) # OrderedDict([('allen', None), ('belln', None), ('cllen', None)])print(dic.fromkeys(name, 20)) # OrderedDict([('allen', 20), ('belln', 20), ('cllen', 20)])

从Python 3.6开始,Python的字典底层机制更改后已经变成为有序字典了。虽然collections.OrderedDict的使用价值降低了,不过collections中的defaultdict仍然很有用,它可以实现一键多值的字典,如下所示:

y = defaultdict(list) # 一键多值字典使用defaultdicty["stock"].append("600213")y["stock"].append("600223")y["stock"].append("600413")y["stock"].append("600513")y["stock"].append("600225")y["stock"].append("600273")print(y) # defaultdict(<class 'list'>, {'stock': ['600213', '600223', '600413', '600513', '600225', '600273']})

接下来再介绍下collections中的Counter。Counter是一个简单的计数器,目的是用来跟踪值出现的次数。Counter以字典的键值对形式存储值出现的次数,如下所示:

c_dict = Counter('yyydadyyyaadadsaaaxxxx')print(c_dict) # Counter({'a': 7, 'y': 6, 'd': 4, 'x': 4, 's': 1})

当然也可以使用for循环实现跟踪值出现的次数,如下所示,不过使用Counter更加高效。

data = 'yyydadyyyaadadsaaaxxxx'val_cnt = {}for i in data: i_cnt = val_cnt.get(i,0) # 查找键的值 val_cnt[i] = i_cnt + 1print(val_cnt) # {'y': 6, 'd': 4, 'a': 7, 's': 1, 'x': 4}print(val_cnt.get('a')) # 7

最后我们再介绍一下ChainMap,它可以加速字典的合并。通常我们合并字典的方式如下所示:

dicta = {i: i + 1 for i in range(1, 100, 2)}dictb = {i: i + 2 for i in range(1, 100, 2)}dictc = {i: i + 3 for i in range(1, 100, 2)}dictd = {i: i + 4 for i in range(1, 100, 2)}dic_total = dicta.copy()dic_total.update(dictb)dic_total.update(dictc)dic_total.update(dictd)print(dic_total)print(dic_total.get(3, 0))

使用更高效的ChainMap方法,如下所示:

dic_total = ChainMap(dicta, dictb, dictc, dictd)

感谢各位的阅读,以上就是“怎么使用Python内置库collections”的内容了,经过本文的学习后,相信大家对怎么使用Python内置库collections这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯