collections — types de collections et de conteneurs¶
Ce module fournit des types de conteneurs spécialisés qui complètent les types intégrés list, tuple, dict et set : une file à double extrémité (deque), une fabrique de tuples à champs nommés (namedtuple()) et un dictionnaire préservant l’ordre (OrderedDict).
Classes¶
- class collections.deque(iterable: Iterable, maxlen: int, flags: int = 0)¶
Les deques (files à double extrémité) sont un conteneur de type liste qui prend en charge l’ajout et le retrait en O(1) à l’une ou l’autre des extrémités. Les nouvelles deques sont créées à l’aide des arguments suivants :
iterable est un itérable utilisé pour remplir la deque lors de sa création. Il peut s’agir d’un tuple ou d’une liste vide pour créer une deque initialement vide.
maxlen doit être spécifié et la deque sera limitée à cette longueur maximale. Une fois la deque pleine, tout nouvel élément ajouté éliminera des éléments de l’extrémité opposée.
Le paramètre optionnel flags peut valoir 1 pour vérifier le dépassement de capacité lors de l’ajout d’éléments.
Les objets deque prennent en charge
bool,len(), l’itération ainsi que la lecture et l’écriture par indice. Ils possèdent également les méthodes suivantes :- append(x: Any) None¶
Ajoute x à l’extrémité droite de la deque. Lève
IndexErrorsi la vérification du dépassement de capacité est activée et qu’il n’y a plus de place dans la file.
- appendleft(x: Any) None¶
Ajoute x à l’extrémité gauche de la deque. Lève
IndexErrorsi la vérification du dépassement de capacité est activée et qu’il n’y a plus de place dans la file.
- pop() Any¶
Retire et renvoie un élément de l’extrémité droite de la deque. Lève
IndexErrorsi aucun élément n’est présent.
- popleft() Any¶
Retire et renvoie un élément de l’extrémité gauche de la deque. Lève
IndexErrorsi aucun élément n’est présent.
- extend(iterable: Iterable) None¶
Étend la deque en ajoutant tous les éléments de iterable à droite de la deque. Lève
IndexErrorsi la vérification du dépassement de capacité est activée et qu’il n’y a plus de place dans la deque.
- collections.namedtuple(name: str, fields: str | Sequence[str]) type¶
Il s’agit d’une fonction fabrique permettant de créer un nouveau type namedtuple avec un nom et un ensemble de champs spécifiques. Un namedtuple est une sous-classe de tuple qui permet d’accéder à ses champs non seulement par indice numérique, mais aussi avec une syntaxe d’accès par attribut utilisant des noms de champs symboliques. Fields est une séquence de chaînes spécifiant les noms de champs. Pour la compatibilité avec CPython, il peut également s’agir d’une chaîne avec des noms de champs séparés par des espaces (mais c’est moins efficace). Exemple d’utilisation
from collections import namedtuple MyTuple = namedtuple("MyTuple", ("id", "name")) t1 = MyTuple(1, "foo") t2 = MyTuple(2, "bar") print(t1.name) assert t2.name == t2[1]
Les instances fournissent également la méthode suivante :
- collections._asdict() OrderedDict
Renvoie les noms des champs et leurs valeurs sous forme d’un
OrderedDict.
- class collections.OrderedDict(*args: Any, **kwargs: Any)¶
Sous-classe du type
dictqui mémorise et préserve l’ordre d’ajout des clés. Accepte les mêmes formes de constructeur quedict(un itérable de paires(key, value), un autre mapping, ou des arguments nommés). Lorsqu’un dictionnaire ordonné est parcouru, les clés/éléments sont renvoyés dans l’ordre où ils ont été ajoutésfrom collections import OrderedDict # To make benefit of ordered keys, OrderedDict should be initialized # from sequence of (key, value) pairs. d = OrderedDict([("z", 1), ("a", 2)]) # More items can be added as usual d["w"] = 5 d["b"] = 3 for k, v in d.items(): print(k, v)
Sortie
z 1 a 2 w 5 b 3
- popitem() Tuple¶
Retire et renvoie une paire (clé, valeur) du dictionnaire. Les paires sont renvoyées dans l’ordre LIFO.
Différence avec CPython
OrderedDict.popitem()ne prend pas en charge l’argumentlast=Falseet retirera et renverra toujours le dernier élément s’il est présent.Une solution de contournement consiste à utiliser
pop(<first_key>)pour retirer le premier élémentfirst_key = next(iter(d)) d.pop(first_key)