深南之星

导航

 

od = OrderedDict()  # 按照key进入的顺序

od['c']='c'

od['b']='b'

od['e']='e'

print(od)

print(od.keys())

od.move_to_end('e',last=False)  # last控制移到左端还是右端

print(od)

od.popitem(last=True)  # last是控制移除最左端还是最有段

print(od)

od.pop('e')  # 有字典的方法

print(od)

 

 

注意一点,在Python3下默认dict是有序的,这里的有序不是大小排序,是按照插入字典的顺序,而在Python2下则默认是无序的,想要保持有序需要使用OrderedDict

使用OrderreDict实现LRUCache

# 实现LRUcache ,实现一个有序的访问 

# dict使用kv存储键值对得缓存

# OrderreDict用来实现最近访问的key

 

from collections import OrderedDict

class  LRUCasche:

    def __init__(self,capacity = 256):

        self.od = OrderedDict()

        self.capacity = capacity

 

    def get(self,key):  # 访问

        if key in  self.od:

            val = self.od[key]

            self.od.move_to_end(key)  # 每次访问更新最近使用的key

            return val

        else:

            return -1

 

    def put(self,key,value):  # 更新k/v

        if key  in  self.od:

            del self.od[key]

            self.od[key]=value

        else:

            self.od[key]=value

            if len(self.od) > self.capacity:

                self.od.popitem(last=False)  # 移除最左端的

 

 

posted on 2020-02-14 09:22  深南之星  阅读(225)  评论(0编辑  收藏  举报