python之collections模塊(OrderDict,defaultdict)
阿新 • • 發佈:2019-01-05
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)