Explorer le module collections de Python

PythonPythonBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce tutoriel, nous allons explorer le module collections intégré à Python. Le module collections est une bibliothèque puissante qui propose diverses types de données conteneurs qui étendent la fonctionnalité des conteneurs intégrés de Python tels que les listes, les tuples et les dictionnaires.

NamedTuple

Un namedtuple est une sous-classe de tuple, offrant des champs nommés pour une plus grande lisibilité et un code auto-documenté. Créons un namedtuple dans named_tuple.py pour représenter un point dans un espace 2D :

## Import collections
from collections import namedtuple

## Définissez un type namedtuple Point avec les propriétés x et y
Point = namedtuple('Point', ['x', 'y'])

## Créez un objet Poinit
p = Point(1, 2)

## Récupérez les propriétés du point
print(p.x)
print(p.y)

Ensuite, exécutez le script dans le terminal :

python named_tuple.py

Sortie :

1
2

Counter

Counter est une sous-classe de dict qui compte les occurrences d'éléments dans une collection. Créons un objet Counter dans counter.py pour compter les occurrences de caractères dans une chaîne de caractères :

from collections import Counter

text = "hello, world!"
## Obtient le nombre d'occurrences des éléments dans la collection et les renvoie sous forme de dictionnaire
char_count = Counter(text)

print(char_count)

Ensuite, exécutez le script dans le terminal :

python counter.py

Sortie :

Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ',': 1,'': 1, 'w': 1, 'r': 1, 'd': 1, '!': 1})

OrderedDict

OrderedDict est une sous-classe de dict qui conserve l'ordre dans lequel les éléments ont été insérés. Créons un OrderedDict dans ordered_dict.py et ajoutons quelques paires clé-valeur :

from collections import OrderedDict

## Initialisation de OrderedDict
od = OrderedDict()

## Insertion de paires clé-valeur
od['a'] = 1
od['b'] = 2
od['c'] = 3

## Itération sur les paires clé-valeur et affichage du contenu
for key, value in od.items():
    print(key, value)

Ensuite, exécutez le script dans le terminal :

python ordered_dict.py

Sortie :

a 1
b 2
c 3

DefaultDict

Defaultdict(int)

DefaultDict est une sous-classe de dict qui fournit une valeur par défaut pour une clé inexistante. Créons un DefaultDict avec des valeurs par défaut 0 dans default_dict1.py et comptons les occurrences de mots dans une phrase :

from collections import defaultdict

sentence = "the quick brown fox jumps over the lazy dog"
word_count1 = defaultdict(int)

for word in sentence.split():
    ## Compte les occurrences de mots
    word_count1[word] += 1

print(dict(word_count1))

Ensuite, exécutez le script dans le terminal :

python default_dict1.py

Sortie :

{'the': 2, 'quick': 1, 'brown': 1, 'fox': 1, 'jumps': 1, 'over': 1, 'lazy': 1, 'dog': 1}

Si nous n'avions pas utilisé DefaultDict, le code équivalent serait le suivant :

sentence = "the quick brown fox jumps over the lazy dog"
result = {}

for word in sentence.split():
    if word in result:
        result[word] += 1
    else:
        result[word] = 1

print(result)

Defaultdict(list)

Ensuite, créons un DefaultDict avec des valeurs par défaut [] dans default_dict2.py et stockons le nombre pour chaque lettre :

from collections import defaultdict

data = [('a', 1), ('a', 1), ('a', 3), ('b', 1), ('b', 2), ('b', 3)]
word_count2 = defaultdict(list)

for (key,value) in data:
    ## Stocke le nombre pour chaque lettre
    word_count2[key].append(value)

print(dict(word_count2))

Ensuite, exécutez le script dans le terminal :

python default_dict2.py

Sortie :

{'a': [1, 1, 3], 'b': [1, 2, 3]}

Si nous n'avions pas utilisé DefaultDict, le code équivalent serait le suivant :

data = [('a', 1), ('a', 1), ('a', 3), ('b', 1), ('b', 2), ('b', 3)]
result = {}

for (key, value) in data:
    if key in result:
        result[key].append(value)
    else:
        result[key] = [value]

print(result)

Defaultdict(set)

Enfin, créons un DefaultDict avec des valeurs par défaut set() dans default_dict3.py et stockons le nombre non répété pour chaque lettre :

from collections import defaultdict

data = [('a', 1), ('a', 1), ('a', 3), ('b', 1), ('b', 2), ('b', 3)]
word_count3 = defaultdict(set)

for (key,value) in data:
    ## Stocke le nombre non répété pour chaque lettre
    word_count3[key].add(value)

print(dict(word_count3))

Ensuite, exécutez le script dans le terminal :

python default_dict3.py

Sortie :

{'a': {1, 3}, 'b': {1, 2, 3}}

Si nous n'avions pas utilisé DefaultDict, le code équivalent serait le suivant :

data = [('a', 1), ('a', 1), ('a', 3), ('b', 1), ('b', 2), ('b', 3)]
result = {}

for (key, value) in data:
    if key in result:
        result[key].add(value)
    else:
        result[key] = {value}

print(result)

Deque

Un deque (file d'attente double-terminale) est une généralisation des piles et des files d'attente qui prend en charge des ajouts et des retraits rapides en O(1) à partir des deux extrémités. Créons un deque dans deque.py et effectuons quelques opérations :

from collections import deque

d = deque([1, 2, 3, 4, 5])

## Ajoute à droite
d.append(6)
print("Ajoute à droite :", d)

## Ajoute à gauche
d.appendleft(0)
print("Ajoute à gauche :", d)

## Retire de droite
right_element = d.pop()
print("L'élément de droite :", right_element)
print("Retire de droite :", d)

## Retire de gauche
left_element = d.popleft()
print("L'élément de gauche :", left_element)
print("Retire de gauche :", d)

## Fait tourner le deque
d.rotate(2)
print("Fait tourner le deque dans le sens des aiguilles d'une montre :", d)

d.rotate(-2)
print("Fait tourner le deque dans le sens inverse des aiguilles d'une montre :", d)

Ensuite, exécutez le script dans le terminal :

python deque.py

Sortie :

Ajoute à droite : deque([1, 2, 3, 4, 5, 6])
Ajoute à gauche : deque([0, 1, 2, 3, 4, 5, 6])
L'élément de droite : 6
Retire de droite : deque([0, 1, 2, 3, 4, 5])
L'élément de gauche : 0
Retire de gauche : deque([1, 2, 3, 4, 5])
Fait tourner le deque dans le sens des aiguilles d'une montre : deque([4, 5, 1, 2, 3])
Fait tourner le deque dans le sens inverse des aiguilles d'une montre : deque([1, 2, 3, 4, 5])

Résumé

Dans ce tutoriel, nous avons abordé les principales classes fournies par le module collections, y compris namedtuple, Counter, OrderedDict, DefaultDict et deque. Ces classes peuvent être utiles pour diverses tâches et sont d'excellentes additions à votre outilset Python.