HOWTO · Python

Ajouter des paires clé-valeur à un dictionnaire dans une boucle en Python

Apprenez à ajouter des paires clé-valeur à un dictionnaire dans une boucle en Python.

Sur cette page

L’affectation dans un dictionnaire ajoute ou met à jour une entrée : placez dictionary[key] = value dans une boucle. Lorsque les clés et les valeurs se trouvent dans des itérables distincts, associez-les avec zip() dans une boucle for. Utilisez une boucle while lorsque l’indice lui-même est important.

Ajouter des paires clé-valeur à un dictionnaire dans une boucle

Commencez par créer un dictionnaire, puis associez chaque clé à la valeur correspondante au fil des paires parcourues par la boucle. Les valeurs peuvent être de différents types d’objets Python ; les clés, elles, doivent être hachables. L’exemple suivant associe des noms à des notes :

Associer les clés et les valeurs avec zip()

À chaque itération, zip(keys, values) produit une paire issue de chaque itérable. Exécutez cet exemple :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

keys = ["Ada", "Linus", "Grace"]
values = [98, 91, 100]

scores = {}
for key, value in zip(keys, values):
    scores[key] = value

print(scores)
{'Ada': 98, 'Linus': 91, 'Grace': 100}

L’affectation enregistre chaque note sous le nom qui lui est associé. Cette méthode fonctionne aussi si les valeurs sont des listes, des fonctions ou d’autres objets ; seules les clés du dictionnaire doivent être hachables.

Utiliser une boucle while lorsque les indices sont nécessaires

Une boucle basée sur un indice est utile lorsqu’une autre opération a besoin de la position. Définissez une limite d’arrêt et incrémentez l’indice à chaque passage :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

keys = ["Ada", "Linus", "Grace"]
values = [98, 91, 100]
scores = {}
index = 0
limit = min(len(keys), len(values))

while index < limit:
    scores[keys[index]] = values[index]
    index += 1

Ici, limit garantit que la boucle n’accède qu’aux positions présentes dans les deux listes. Pour associer des éléments de façon ordinaire, for key, value in zip(keys, values) est plus court et évite de gérer l’indice vous-même.

Gérer les entrées de longueurs différentes et les clés existantes

Par défaut, zip() s’arrête dès que l’itérable le plus court est épuisé. Les éléments sans correspondance dans l’itérable le plus long sont ignorés. Si chaque clé doit avoir une valeur, comparez les longueurs des entrées avant la boucle et décidez comment votre programme doit gérer une différence.

Une affectation à une clé déjà présente dans le dictionnaire remplace sa valeur précédente ; elle ne crée pas une seconde entrée avec la même clé. Si vous devez conserver les deux valeurs, utilisez une collection comme valeur et ajoutez-y la nouvelle valeur. Une clé doit être hachable : les chaînes, les nombres et les tuples composés d’éléments hachables conviennent, contrairement aux listes et aux dictionnaires modifiables.

Afficher le résultat et comprendre la complexité

Utilisez print(scores) pour examiner un petit dictionnaire, ou parcourez scores.items() pour mettre en forme chaque clé et chaque valeur. Pour les valeurs de l’exemple, la représentation simple du dictionnaire est déterministe. La représentation de certains objets personnalisés peut contenir une adresse mémoire ; pour obtenir un affichage lisible et reproductible, affichez des attributs précis.

Pour m paires, la boucle effectue m affectations et prend en moyenne un temps O(m), car chaque affectation au dictionnaire est en moyenne en O(1). Il s’agit d’un comportement moyen : des collisions peuvent ralentir certaines affectations. Le dictionnaire produit contient au plus m clés distinctes et utilise donc un espace supplémentaire en O(m). L’itérateur zip() lui-même utilise un espace auxiliaire constant. Si le dictionnaire contient déjà d entrées, celles-ci sont conservées, sauf si une clé associée remplace leur valeur ; sa taille finale est au plus d + m.