ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

OrderedDict实现FIFODict

2020-07-20 17:00:18  阅读:296  来源: 互联网

标签:__ OrderedDict 实现 self value key containsKey FIFODict


OrderedDict可以实现一个FIFO(先进先出)的dict,当容量超出限制时,先删除最早添加的Key

 1 from collections import OrderedDict
 2 
 3 class LastUpdatedOrderedDict(OrderedDict):
 4 
 5     def __init__(self, capacity):
 6         super(LastUpdatedOrderedDict, self).__init__()
 7         self._capacity = capacity
 8 
 9     def __setitem__(self, key, value):
10         containsKey = 1 if key in self else 0
11         if len(self) - containsKey >= self._capacity:
12             last = self.popitem(last=False)
13             print('remove:', last)
14         if containsKey:
15             del self[key]
16             print('set:', (key, value))
17         else:
18             print('add:', (key, value))
19         OrderedDict.__setitem__(self, key, value)

对于廖大佬的本操作的官方实例代码的第11行,开始很迷惑

为什么要用容器目前长度去减去containsKey(待添加Key指是否已在字典中标志)呢?(而不是len(self)+1>=   当然此种做法也可以)

后面把代码在脑海里跑了一遍,就很好理解了

1.如果containsKey==1(待添加Key已经在字典里),那么如果字典已经满了,自然11行判断为false。

而后交给第15行进行处理,现将已有的键值对进行删除,然后把键值对再进行添加(相当于后移key,修改value)

2.如果contas==0,那么自然满了的话,11行判断为true,进而进行后续操作

 

标签:__,OrderedDict,实现,self,value,key,containsKey,FIFODict
来源: https://www.cnblogs.com/Mr-BING/p/13346012.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有