python之collections模块(OrderDict,defaultdict)
Posted 少年阿斌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之collections模块(OrderDict,defaultdict)相关的知识,希望对你有一定的参考价值。
前言:
import collections
print([name for name in dir(collections) if not name.startswith("_")])
[\'AsyncIterable\', \'AsyncIterator\', \'Awaitable\', \'ByteString\', \'Callable\', \'ChainMap\', \'Container\', \'Coroutine\',
\'Counter\', \'Generator\', \'Hashable\', \'ItemsView\', \'Iterable\', \'Iterator\', \'KeysView\', \'Mapping\', \'MappingView\',
\'MutableMapping\', \'MutableSequence\', \'MutableSet\', \'OrderedDict\', \'Sequence\', \'Set\', \'Sized\', \'UserDict\', \'UserList\',
\'UserString\', \'ValuesView\', \'abc\', \'defaultdict\', \'deque\', \'namedtuple\']
常用:
a)Counter: 计数器,用于统计元素的数量
b)OrderDict:有序字典
c)defaultdict:值带有默认类型的字典
d)namedtuple:可命名元组,通过名字来访问元组元素
e)deque :双向队列,队列头尾都可以放,也都可以取(与单向队列对比,单向队列只能一头放,另一头取)
3.from colllections import OrderDict
python自带的字典是按key 的hash排序,所以大家都认为map是无序的。但是python的collections模块有一个OrderDict类。是一个有顺序的map.
创建
a=OrderedDict() b=OrderedDict({2:\'b\',1:\'c\'}) m={2:\'b\',1:\'c\'} print(a,b,m) # OrderedDict() # OrderedDict([(1, \'c\'), (2, \'b\')]) # {1: \'c\', 2: \'b\'}
#同样是保存了几个元素,但是使用OrderedDict会根据放入元素的先后顺序进行排序。所以输出的值是排好序的。
方法
map里面的操作他都有
区别map
d2={} d2[\'a\']=\'A\' d2[\'b\']=\'B\' d2[\'c\']=\'C\' d3={} d3[\'c\']=\'C\' d3[\'a\']=\'A\' d3[\'b\']=\'B\' print(d2 == d3)=>true
d4=collections.OrderedDict() d4[\'a\']=\'A\' d4[\'b\']=\'B\' d4[\'c\']=\'C\' d5=collections.OrderedDict() d5[\'c\']=\'C\' d5[\'a\']=\'A\' d5[\'b\']=\'B\' print (d1==d2)=>False
其他
dd = {\'banana\': 3, \'apple\':4, \'pear\': 1, \'orange\': 2} # sorted(dd.items(), key=lambda t: t[1])==>[(\'pear\', 1), (\'orange\', 2), (\'banana\', 3), (\'apple\', 4)] #按key排序 kd = OrderedDict(sorted(dd.items(), key=lambda t: t[0])) print(kd) #按照value排序 vd = OrderedDict(sorted(dd.items(),key=lambda t:t[1])) print(vd) #输出 OrderedDict([(\'apple\', 4), (\'banana\', 3), (\'orange\', 2), (\'pear\', 1)]) OrderedDict([(\'pear\', 1), (\'orange\', 2), (\'banana\', 3), (\'apple\', 4)])
4.defaultdict 带有默认值(None)的字典
为什么要有一个带有默认值的字典。因为当我使用普通的字典时,用法一般是dict={},添加元素的只需要dict[element] =value即,调用的时候也是如此,dict[element] = xxx,但前提是element字典里,如果不在字典里就会报错。
defaultdict就能排上用场了,defaultdict的作用是在于,当字典里的key不存在但被查找时,返回的不是keyError而是一个默认值,这个默认值依赖于构造参数。
int=>0
str=>""
set=>set()
list=>[]......
from collections import defaultdict dict1 = defaultdict(int) print(dict1[1]) #结果是0
# 利用defaultdict给列表去重, 非原序 def string_duplicate_3(self, s): # 按照之前的顺序 from collections import defaultdict a = defaultdict() for x in s: a[x] = 0 return a.keys()
以上是关于python之collections模块(OrderDict,defaultdict)的主要内容,如果未能解决你的问题,请参考以下文章