1. 程式人生 > >python之collections模塊(OrderDict,defaultdict)

python之collections模塊(OrderDict,defaultdict)

str mutable item 有一個 sync chain mut container .com

前言:

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)])

python之collections模塊(OrderDict,defaultdict)