0

我正在查看 leetcode 上 LRU 缓存实现的解决方案。并且内置的 dict 也是从 Python 3.6+ 订购的。我想知道是否有任何类似于 OrderedDict 的 move_to_end() 的函数可以与内置 dict 一起使用并摆脱 OrderedDict。

from collections import OrderedDict
class LRUCache(OrderedDict):

    def __init__(self, capacity):
        """
        :type capacity: int
        """
        self.capacity = capacity

    def get(self, key):
        """
        :type key: int
        :rtype: int
        """
        if key not in self:
            return - 1
        
        self.move_to_end(key)
        return self[key]

    def put(self, key, value):
        """
        :type key: int
        :type value: int
        :rtype: void
        """
        if key in self:
            self.move_to_end(key)
        self[key] = value
        if len(self) > self.capacity:
            self.popitem(last = False)
4

1 回答 1

-1

您可以做的最好的事情是删除条目并重新插入:

d[key] = d.pop(key)

请注意,由于订单保存的实现方式不同,因此没有有效的方法可以将条目移动到支持的开头OrderedDict

于 2021-01-13T23:24:07.330 回答