Стандартный dict может полностью эмулировать методы OrderedDict:
# Удалить самый первый элемент
# od.popitem(0)
>>> d = dict(a=1, b=2, c=3)
>>> del d[next(iter(d))]
>>> d
{'b': 2, 'c': 3}
# Обновить позицию
# od.move_to_end('b')
>>> d['b'] = d.pop('b')
>>> d
{'c':3, 'b': 2}
Этих двух методов достаточно что-бы сделать собственную реализацию LRU кэша:
# Элемент не в кэше, сохранить новый элемент и удалить самый старый
d[args] = func(*args)
if len(d) > maxsize:
d.popitem(0)
# Элемент найден в кеше, продвигаем его вверх очереди
d.move_to_end(args) https://docs.python.org/3/library/collections.html#ordereddict-examples-and-recipes Метод popitem есть в обычном dict и он делает тоже самое что и в OrderedDict.popitem(True). Но у обычных dict нет быстрого эквивалента метода move_to_end.
Присоединяйтесь — мы покажем вам много интересного
Присоединяйтесь к ОК, чтобы подписаться на группу и комментировать публикации.
Нет комментариев