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)的主要内容,如果未能解决你的问题,请参考以下文章

collections模块

Collections模块

python--模块之collection

python之collections模块

python之collection模块

python之collection模块