pythonorder_python之collections模块(OrderDict,defaultdict)

前言:

importcollections

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=lambdat: 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 importdefaultdict

dict1=defaultdict(int)print(dict1[1])#结果是0

#利用defaultdict给列表去重, 非原序

defstring_duplicate_3(self, s):#按照之前的顺序

from collections importdefaultdict

a=defaultdict()for x ins:

a[x]=0return a.keys()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值