web-dev-qa-db-fra.com

Complexité de la suppression d'une clé de python ordonné dict

Suppression d'une clé d'un python dict ou defaultdict dans python est O(1) opération, comme mentionné ici et ici . Pour supprimer une clé de OrderedDict, nous pouvons soit utiliser del d[key] soit utiliser popitem() méthode, comme mentionné dans the docs .

Quelle est l'implémentation sous-jacente de OrderedDict et la complexité temporelle de l'opération del?

Edit: Cette réponse performances OrderedDict (par rapport à deque) , fait référence à la complexité de del dans OrderedDict comme étant O (1). Cependant, comment pouvons-nous le justifier au niveau des détails de mise en œuvre?

10
Riken Shah

implémentation de OrderedDict.__delitem__ in Python 3.7 est le suivant:

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

Ce code fait 3 choses:

  • Supprimez un élément du dictionnaire de valeurs-clés interne.
  • Supprimez un nœud du dictionnaire contenant des nœuds de liste liée.
  • Supprimez un élément d'une liste doublement liée.

Étant donné que toutes les opérations ci-dessus prennent un temps constant, la complexité de OrderedDict.__delitem__ est également constant.

15
Agost Biro