温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么使用Python内置库collections

发布时间:2021-11-20 15:15:16 阅读:662 作者:iii 栏目:编程语言
Python开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这篇文章主要讲解了“怎么使用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-value
print(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() 获取字典所有的key
print(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) # 一键多值字典使用defaultdict
y["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 + 1
print(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(11002)}
dictb = {i: i + 2 for i in range(11002)}
dictc = {i: i + 3 for i in range(11002)}
dictd = {i: i + 4 for i in range(11002)}
dic_total = dicta.copy()
dic_total.update(dictb)
dic_total.update(dictc)
dic_total.update(dictd)
print(dic_total)
print(dic_total.get(30))

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

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

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

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:http://blog.itpub.net/69923331/viewspace-2658546/

AI

开发者交流群×