Lesson 11
Dictionnaires
1. Dictionnaires
Les listes normales (tableaux) sont généralement un ensemble d'éléments numérotés. Par conséquent, si vous souhaitez faire référence à un élément de liste, vous devez spécifier son numéro. Le nombre d'éléments dans la liste identifie de manière unique l'élément lui-même. Mais les numéros d'identification ne sont pas toujours pratiques. Par exemple, les routes des trains en Russie utilisent des lettres et des chiffres comme code d'identification (numéro et un chiffre), un code alphabétique numérique identifie les vols, c'est-à-dire des informations sur les vols, les trains ou les avions. une chaîne de texte.
La structure de données, qui permet d'utiliser un type d'index arbitraire au lieu de numérique, est appelée dictionnaire ou tableau associatif . La structure de données correspondante en Python s'appelle dict
.
Considérons un exemple simple. Obtenez le dictionnaire Capitals
, où index est le nom du pays, et la valeur - le nom de la capitale de ce pays. Maintenant, pour une rangée avec le nom du pays, nous pouvons facilement identifier sa capitale.
# Créer des dictes vides Capitals = dict() # Remplissez-le avec quelques valeurs Capitals['Russia'] = 'Moscow' Capitals['Ukraine'] = 'Kiev' Capitals['USA'] = 'Washington' Countries = ['Russia', 'France', 'USA', 'Russia'] for country in Countries: # Pour chaque pays de la liste vérifier pour voir si elle est dans le dictionnaire Capitals if country in Capitals: print('The capital of ' + country + ' is ' + Capitals[country]) else: print('The capital of ' + country + ' is unknown')
Ainsi, chaque élément du dictionnaire se compose de deux objets: clé et valeurs . Dans notre exemple, la clé est le nom du pays et la valeur est le nom de la capitale. La clé identifie l'élément du dictionnaire, la valeur est la donnée correspondant à la clé donnée. Les valeurs clés sont uniques, c'est-à-dire qu'il ne peut y avoir deux clés identiques dans le dictionnaire.
Nous sommes habitués aux dictionnaires qui nous entourent, les dictionnaires en papier habituels (définition, monolingue, bilingue). Pour définir un dictionnaire, la clé est le mot (le titre de l'article), et la valeur est l'article lui-même, et pour accéder à l'article, vous devez spécifier la clé de mot.
Un annuaire téléphonique est un autre exemple de structure de données de dictionnaire. Dans ce cas, la clé est le nom et la valeur est le numéro de téléphone. Pour le dictionnaire et le répertoire téléphonique, il est facile de trouver un élément du dictionnaire avec une clé donnée (par exemple, si les enregistrements sont stockés dans l'ordre alphabétique des clés, vous pouvez facilement trouver votre clé avec une recherche binaire) est inconnu, et nous ne connaissons que la valeur, la recherche de l'élément avec la valeur donnée peut nécessiter une vue cohérente de tous les éléments du dictionnaire.
Une caractéristique importante du tableau associatif est qu'il est dynamique, c'est-à-dire que vous pouvez ajouter de nouveaux éléments avec n'importe quelle clé et supprimer les éléments existants. La quantité de mémoire utilisée est proportionnelle à la taille du tableau associatif. L'accès aux éléments d'un tableau associatif est plus lent que pour les tableaux ordinaires, mais assez rapidement.
En Python, la clé peut être n'importe quel type de données immuable (non modifiable): entiers et nombres réels, chaînes, tuples. La clé dans le dictionnaire ne peut pas être un ensemble, mais peut être un élément de type frozenset
: un type de données spécial analogique d'un set
types qui ne peut pas être modifié après la création. La valeur de l'élément de dictionnaire peut être n'importe quel type de données, y compris modifiable.
2. Application de dictionnaires
Les dictionnaires sont utilisés dans les cas suivants:
Num['January'] = 1; Num['February'] = 2; ...
Un dictionnaire vide peut être créé en utilisant la fonction dict()
ou une paire d'accolades {}
vide (c'est en fait la raison pour laquelle les accolades ne peuvent pas être utilisées pour créer un ensemble vide). Pour créer un dictionnaire avec un ensemble de valeurs initiales, vous pouvez utiliser les constructions suivantes:
Capitals = {'Russia': 'Moscow', 'Ukraine': 'Kiev', 'USA': 'Washington'} Capitals = dict(RA = 'Moscow', Ukraine = 'Kiev', USA = 'Washington') Capitals = dict([("Russia", "Moscow"), ("Ukraine", "Kiev"), ("USA", "Washington")]) Capitals = dict(zip(["Russia", "Ukraine", "USA"], ["Moscow", "Kiev", "Washington"])) print(Capitals)
Les deux premières méthodes ne peuvent être utilisées que pour créer de petits dictionnaires en listant tous leurs éléments. De plus, dans la seconde méthode, les clés sont passées comme des paramètres nommés de dict
, donc dans ce cas, les clés ne peuvent être que des chaînes, et seulement des identificateurs corrects. Dans les troisième et quatrième cas, vous pouvez créer de grands dictionnaires, si les arguments transférés sont une liste toute faite, qui peut être obtenue non seulement en listant tous les éléments, mais en construisant d'une autre manière pendant l'exécution du programme. Dans la troisième manière, la fonction dict
doit recevoir une liste où chaque élément est un tuple de deux éléments: clé et valeur. La quatrième méthode utilise la fonction zip
, qui doit recevoir deux listes de longueur égale: une liste de clés et une liste de valeurs.
3. Travailler avec des éléments du dictionnaire
Opération de base: obtenir la valeur de l'élément par sa clé. Il est écrit exactement comme pour les listes: A[key]
. S'il n'y a aucun élément avec la clé spécifiée dans le dictionnaire, il soulève l'exception KeyError
.
Une autre façon de définir la valeur basée sur une clé est une méthode get
: A.get(key)
. S'il n'y a aucun élément avec la clé get
dans le dictionnaire, il retourne None
. Dans la forme avec deux arguments, la A.get(key, val)
renvoie val
, si un élément avec la key
n'est pas dans le dictionnaire.
Pour vérifier si un élément appartient à un dictionnaire, les opérations in
et not in
sont utilisées, comme pour les ensembles.
Pour ajouter un nouvel élément au dictionnaire, il suffit de lui attribuer une valeur: A[key] = value
.
Pour supprimer un élément du dictionnaire, vous pouvez utiliser del A[key]
(l'opération déclenche une exception KeyError
s'il n'y a pas de telle clé dans le dictionnaire.) Voici deux manières sûres de supprimer un élément du dictionnaire.
A = {'ab' : 'ba', 'aa' : 'aa', 'bb' : 'bb', 'ba' : 'ab'} key = 'ac' if key in A: del A[key] try: del A[key] except KeyError: print('There is no element with key "' + key + '" in dict') print(A)
Dans le premier cas, on vérifie d'abord la présence d'un élément, puis on attrape et manipule l'exception.
Une autre façon de supprimer un élément du dictionnaire est la méthode pop
: A.pop(key)
. Cette méthode renvoie la valeur de l'élément supprimé et si l'élément avec la clé donnée n'est pas dans le dictionnaire, une exception est déclenchée. Si la méthode pop
reçoit un second paramètre, alors pour l'élément manquant, elle retournera la valeur de ce paramètre. Cela permet d'organiser en toute sécurité la suppression de l'élément du dictionnaire: A.pop(key, None)
.
4. Dictionnaire d'itération
Vous pouvez facilement parcourir les touches de tous les éléments du dictionnaire:
A = dict(zip('abcdef', list(range(6)))) for key in A: print(key, A[key])
Les méthodes suivantes renvoient la représentation des éléments du dictionnaire. Les représentations sont similaires aux ensembles, mais elles changent si vous changez les valeurs des éléments. Les keys
méthode renvoie une représentation des clés de tous les éléments, les values
renvoie une représentation de toutes les valeurs et les items
méthode renvoie une représentation de toutes les paires (tuples) de clés et de valeurs.
Ainsi, pour un contrôle rapide si la valeur val
est parmi toutes les valeurs du dictionnaire A
vous devez utiliser la condition booléenne val in A.values()
. Pour parcourir les clés et les variables, vous pouvez effectuer les opérations suivantes:
A = dict(zip('abcdef', list(range(6)))) for key, val in A.items(): print(key, val)