collections中的OrderedDict
生活随笔
收集整理的這篇文章主要介紹了
collections中的OrderedDict
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
使用dict時(shí),Key是無(wú)序的。在對(duì)dict做迭代時(shí),我們無(wú)法確定Key的順序。而如果要保持Key的順序,可以用OrderedDict
注意,OrderedDict的Key會(huì)按照插入的順序排列,不是Key本身排序:
OrderedDict可以實(shí)現(xiàn)一個(gè)FIFO(先進(jìn)先出)的dict,當(dāng)容量超出限制時(shí),先刪除最早添加的Key:
class LastUpdatedOrderedDict(OrderedDict):def __init__(self, capacity):super().__init__()#super(LastUpdatedOrderedDict, self).__init__()self._capacity = capacitydef __setitem__(self, key, value): containsKey = 1 if key in self else 0print('self1:',self)print('len(self):',len(self))# 如果dict容量已滿if len(self) - containsKey >= self._capacity:print('%s(len) - %s(containsKey)>= %s(self._capacity):'% (len(self),containsKey,self._capacity))# 則刪除最先添加的keylast = self.popitem(last=False)print('remove:', last)print('self2:',self)# 檢查dict里是否已經(jīng)存在要增加的(key,value)中的keyif containsKey:# 刪除原來(lái)的keydel self[key]print('set:', (key, value))print('self3:',self)# 如果dict中沒(méi)有要添加的keyelse:print('add:', (key, value))print('self4:',self) OrderedDict.__setitem__(self, key, value)print('self5:',self)dic=LastUpdatedOrderedDict(2) dic['a']=1 print('.......') dic['b']=2 print('.......') dic['c']=3 print('.......') dic['b']=6結(jié)果:
........................................ self1: LastUpdatedOrderedDict() len(self): 0 add: ('a', 1) self6: LastUpdatedOrderedDict() self7: LastUpdatedOrderedDict([('a', 1)]) ....... self1: LastUpdatedOrderedDict([('a', 1)]) len(self): 1 add: ('b', 2) self6: LastUpdatedOrderedDict([('a', 1)]) self7: LastUpdatedOrderedDict([('a', 1), ('b', 2)]) ....... self1: LastUpdatedOrderedDict([('a', 1), ('b', 2)]) len(self): 2 2(len) - 0(containsKey)>= 2(self._capacity): remove: ('a', 1) self3: LastUpdatedOrderedDict([('b', 2)]) add: ('c', 3) self6: LastUpdatedOrderedDict([('b', 2)]) self7: LastUpdatedOrderedDict([('b', 2), ('c', 3)]) ....... self1: LastUpdatedOrderedDict([('b', 2), ('c', 3)]) len(self): 2 set: ('b', 6) self5: LastUpdatedOrderedDict([('c', 3)]) self7: LastUpdatedOrderedDict([('c', 3), ('b', 6)]) ........................................從運(yùn)行結(jié)果可以理清思路
總結(jié)
以上是生活随笔為你收集整理的collections中的OrderedDict的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 地狱火炬怎么获得(地狱火炬)
- 下一篇: eniac(说一说eniac的简介)