【问题标题】:Does Python[3.6+] built-in Dictionary have any function similar to OrderedDict's move_to_end()Python[3.6+] 内置 Dictionary 有没有类似 OrderedDict 的 move_to_end() 的功能
【发布时间】:2021-04-19 00:18:02
【问题描述】:

我在 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)

【问题讨论】:

    标签: python dictionary lru ordereddict


    【解决方案1】:

    您能做的最好的事情就是删除该条目并重新插入:

    d[key] = d.pop(key)
    

    请注意,由于订单保存的实现方式不同,没有像OrderedDict 支持的方式将条目移动到开始的有效方法。

    【讨论】:

      猜你喜欢
      • 2021-05-05
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多