从python有序字典中删除键的复杂性

时间:2018-08-11 14:29:56

标签: python python-3.x dictionary ordereddictionary

从python中的Python dictdefaultdict删除密钥是O(1)操作as mentioned herehere。要从OrderedDict中删除密钥,我们可以使用the docs中提到的del d[key]popitem()方法。

OrderedDict的基础实现是什么?del操作的时间复杂度是什么?

编辑:此答案OrderedDict performance (compared to deque)表示delOrderedDict的复杂度为O(1)。但是,我们如何才能在实现细节级别对其进行辩护呢?

1 个答案:

答案 0 :(得分:7)

Python 3.7中OrderedDict.__delitem__的{​​{3}}如下:

def __delitem__(self, key, dict_delitem=dict.__delitem__):
    'od.__delitem__(y) <==> del od[y]'
    # Deleting an existing item uses self.__map to find the link which gets
    # removed by updating the links in the predecessor and successor nodes.
    dict_delitem(self, key)
    link = self.__map.pop(key)
    link_prev = link.prev
    link_next = link.next
    link_prev.next = link_next
    link_next.prev = link_prev
    link.prev = None
    link.next = None

此代码执行3件事:

  • 从内部键值字典中删除一项。
  • 从包含链接列表节点的字典中删除一个节点。
  • 从双向链接列表中删除一个项目。

由于上述所有操作都需要花费固定的时间,因此OrderedDict.__delitem__的复杂度也是恒定的。