Comprendre les dictionnaires dans Python 3

introduction

Ledictionary est le typemapping intégré à Python. Les dictionnaires mappentkeys àvalues et ces paires clé-valeur fournissent un moyen utile de stocker des données en Python.

Généralement utilisés pour contenir des données liées, telles que les informations contenues dans un ID ou un profil utilisateur, les dictionnaires sont construits avec des accolades de chaque côté{}.

Un dictionnaire ressemble à ceci:

sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}

En plus des accolades, il existe également des deux points (:) dans tout le dictionnaire.

Les mots à la gauche des deux points sont les clés. Keys peut être constitué de n'importe quel type de données immuable. Les clés dans le dictionnaire ci-dessus sont:

  • 'username'

  • 'online'

  • 'followers'

Chacune des clés de l'exemple ci-dessus est une valeurstring.

Les mots à la droite des deux points sont les valeurs. Values peut être composé de n'importe quel type de données. Les valeurs dans le dictionnaire ci-dessus sont:

  • 'sammy-shark'

  • True

  • 987

Chacune de ces valeurs est une chaîne,Boolean ouinteger.

Imprimons le dictionnairesammy:

print(sammy)
Output{'username': 'sammy-shark', 'followers': 987, 'online': True}

En regardant la sortie, l'ordre des paires clé-valeur peut s'être déplacé. Dans les versions 3.5 et antérieures de Python, le type de données du dictionnaire n'est pas ordonné. Cependant, dans Python version 3.6 et ultérieure, le type de données du dictionnaire reste ordonné. Que le dictionnaire soit commandé ou non, les paires clé-valeur resteront intactes, ce qui nous permettra d'accéder aux données en fonction de leur signification relationnelle.

Accéder aux éléments du dictionnaire

Nous pouvons appeler les valeurs d'un dictionnaire en référençant les clés associées.

Accéder aux éléments de données avec des clés

Comme les dictionnaires offrent des paires clé-valeur pour le stockage de données, ils peuvent être des éléments importants de votre programme Python.

Si nous voulons isoler le nom d'utilisateur de Sammy, nous pouvons le faire en appelantsammy['username']. Imprimons cela:

print(sammy['username'])
Outputsammy-shark

Les dictionnaires se comportent comme une base de données en ce sens qu'au lieu d'appeler un entier pour obtenir une valeur d'index particulière comme avec une liste, vous affectez une valeur à une clé et pouvez appeler cette clé pour obtenir sa valeur associée.

En invoquant la clé'username', nous recevons la valeur de cette clé, qui est'sammy-shark'.

Les valeurs restantes dans le dictionnairesammy peuvent également être appelées en utilisant le même format:

sammy['followers']
# Returns 987

sammy['online']
# Returns True

En utilisant les paires clé-valeur des dictionnaires, nous pouvons référencer des clés pour récupérer des valeurs.

Utilisation de méthodes pour accéder aux éléments

En plus d'utiliser des clés pour accéder aux valeurs, nous pouvons également utiliser certaines méthodes intégrées:

  • dict.keys() isole les clés

  • dict.values() isole les valeurs

  • dict.items() renvoie des éléments dans un format de liste de paires de tuples(key, value)

Pour renvoyer les clés, nous utiliserions la méthodedict.keys(). Dans notre exemple, cela utiliserait le nom de la variable et seraitsammy.keys(). Passons cela à une méthodeprint() et regardons le résultat:

print(sammy.keys())
Outputdict_keys(['followers', 'username', 'online'])

Nous recevons une sortie qui place les clés dans un objet de vue itérable de la classedict_keys. Les clés sont ensuite imprimées dans un format de liste.

Cette méthode peut être utilisée pour interroger des dictionnaires. Par exemple, nous pouvons examiner les clés communes partagées entre deux structures de données de dictionnaire:

sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}
jesse = {'username': 'JOctopus', 'online': False, 'points': 723}

for common_key in sammy.keys() & jesse.keys():
    print(sammy[common_key], jesse[common_key])

Le dictionnairesammy et le dictionnairejesse sont chacun un dictionnaire de profil utilisateur.

Cependant, leurs profils ont des clés différentes, car Sammy a un profil social avec des suiveurs associés et Jesse a un profil de jeu avec des points associés. Les 2 clés qu'ils ont en commun sontusername etonline status, que nous pouvons trouver lorsque nous exécutons ce petit programme:

Outputsammy-shark JOctopus
True False

Nous pourrions certainement améliorer le programme pour rendre la sortie plus lisible par l'utilisateur, mais cela montre quedict.keys() peut être utilisé pour vérifier dans divers dictionnaires pour voir ce qu'ils partagent ou non. Ceci est particulièrement utile pour les grands dictionnaires.

De même, nous pouvons utiliser la méthodedict.values() pour interroger les valeurs dans le dictionnairesammy, qui serait construit commesammy.values(). Imprimons ceux-ci:

sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}

print(sammy.values())
Outputdict_values([True, 'sammy-shark', 987])

Les deux méthodeskeys() etvalues() renvoient des listes non triées des clés et des valeurs présentes dans le dictionnairesammy avec les objets de vue dedict_keys etdict_values respectivement.

Si nous nous intéressons à tous les éléments d'un dictionnaire, nous pouvons y accéder avec la méthodeitems():

print(sammy.items())
Outputdict_items([('online', True), ('username', 'sammy-shark'), ('followers', 987)])

Le format renvoyé de ceci est une liste composée de paires de tuples(key, value) avec l'objet de vuedict_items.

Nous pouvons parcourir le format de liste retourné avec une bouclefor. Par exemple, nous pouvons imprimer chacune des clés et valeurs d'un dictionnaire donné, puis le rendre plus lisible par l'homme en ajoutant une chaîne:

for key, value in sammy.items():
    print(key, 'is the key for the value', value)
Outputonline is the key for the value True
followers is the key for the value 987
username is the key for the value sammy-shark

La bouclefor ci-dessus a parcouru les éléments du dictionnairesammy et a imprimé les clés et les valeurs ligne par ligne, avec des informations pour faciliter la compréhension par les humains.

Nous pouvons utiliser des méthodes intégrées pour accéder aux éléments, aux valeurs et aux clés à partir de structures de données de dictionnaire.

Modification de dictionnaires

Les dictionnaires sont une structure de données modifiable, vous pouvez donc les modifier. Dans cette section, nous allons ajouter et supprimer des éléments de dictionnaire.

Ajout et modification d'éléments de dictionnaire

Sans utiliser de méthode ou de fonction, vous pouvez ajouter des paires clé-valeur aux dictionnaires en utilisant la syntaxe suivante:

dict[key] = value

Nous verrons comment cela fonctionne dans la pratique en ajoutant une paire clé-valeur à un dictionnaire appeléusernames:

usernames = {'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}

usernames['Drew'] = 'squidly'

print(usernames)
Output{'Drew': 'squidly', 'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}

Nous voyons maintenant que le dictionnaire a été mis à jour avec la paire clé-valeur'Drew': 'squidly'. Comme les dictionnaires peuvent ne pas être ordonnés, cette paire peut apparaître n'importe où dans la sortie du dictionnaire. Si nous utilisons le dictionnaireusernames plus tard dans notre fichier programme, il inclura la paire clé-valeur supplémentaire.

De plus, cette syntaxe peut être utilisée pour modifier la valeur attribuée à une clé. Dans ce cas, nous référencerons une clé existante et lui transmettrons une valeur différente.

Prenons un dictionnairedrew qui est l’un des utilisateurs d’un réseau donné. Nous dirons que cet utilisateur a eu une augmentation du nombre d'abonnés aujourd'hui, nous devons donc mettre à jour la valeur entière transmise à la clé'followers'. Nous utiliserons la fonctionprint() pour vérifier que le dictionnaire a été modifié.

drew = {'username': 'squidly', 'online': True, 'followers': 305}

drew['followers'] = 342

print(drew)
Output{'username': 'squidly', 'followers': 342, 'online': True}

Dans la sortie, nous voyons que le nombre d'adeptes est passé de la valeur entière de305 à342.

Nous pouvons utiliser cette méthode pour ajouter des paires clé-valeur aux dictionnaires avec une entrée utilisateur. Écrivons un programme rapide,usernames.py qui s'exécute sur la ligne de commande et permet à l'utilisateur d'ajouter plus de noms et de noms d'utilisateurs associés:

usernames.py

# Define original dictionary
usernames = {'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}

# Set up while loop to iterate
while True:

    # Request user to enter a name
    print('Enter a name:')

    # Assign to name variable
    name = input()

    # Check whether name is in the dictionary and print feedback
    if name in usernames:
        print(usernames[name] + ' is the username of ' + name)

    # If the name is not in the dictionary...
    else:

        # Provide feedback
        print('I don\'t have ' + name + '\'s username, what is it?')

        # Take in a new username for the associated name
        username = input()

        # Assign username value to name key
        usernames[name] = username

        # Print feedback that the data was updated
        print('Data updated.')

Lançons le programme en ligne de commande:

python usernames.py

Lorsque nous exécutons le programme, nous obtenons quelque chose comme la sortie suivante:

OutputEnter a name:
Sammy
sammy-shark is the username of Sammy
Enter a name:
Jesse
I don't have Jesse's username, what is it?
JOctopus
Data updated.
Enter a name:

Lorsque nous avons fini de tester le programme, nous pouvons appuyer surCTRL + C pour quitter le programme. Vous pouvez configurer un déclencheur pour quitter le programme (par exemple en tapant la lettreq) avec unconditional statement pour améliorer le code.

Cela montre comment vous pouvez modifier les dictionnaires de manière interactive. Avec ce programme particulier, dès que vous quittez le programme avecCTRL + C, vous perdrez toutes vos données à moins que vous n'implémentiez un moyen dehandle reading and writing files.

Nous pouvons également ajouter et modifier des dictionnaires en utilisant la méthodedict.update(). Cela varie desappend()method disponibles dans les listes.

Dans le dictionnairejesse ci-dessous, ajoutons la clé'followers' et attribuons-lui une valeur entière avecjesse.update(). Ensuite, nous allonsprint() le dictionnaire mis à jour.

jesse = {'username': 'JOctopus', 'online': False, 'points': 723}

jesse.update({'followers': 481})

print(jesse)
Output{'followers': 481, 'username': 'JOctopus', 'points': 723, 'online': False}

À partir de la sortie, nous pouvons voir que nous avons ajouté avec succès la paire clé-valeur'followers': 481 au dictionnairejesse.

Nous pouvons également utiliser la méthodedict.update() pour modifier une paire clé-valeur existante en remplaçant une valeur donnée pour une clé spécifique.

Modifions l'état en ligne de Sammy deTrue àFalse dans le dictionnairesammy:

sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}

sammy.update({'online': False})

print(sammy)
Output{'username': 'sammy-shark', 'followers': 987, 'online': False}

La lignesammy.update({'online': False}) fait référence à la clé existante'online' et modifie sa valeur booléenne deTrue àFalse. Lorsque nous appelons le dictionnaireprint(), nous voyons la mise à jour avoir lieu dans la sortie.

Pour ajouter des éléments aux dictionnaires ou modifier des valeurs, nous pouvons utiliser la syntaxedict[key] = value ou la méthodedict.update().

Suppression d'éléments du dictionnaire

Tout comme vous pouvez ajouter des paires clé-valeur et modifier des valeurs dans le type de données du dictionnaire, vous pouvez également supprimer des éléments dans un dictionnaire.

Pour supprimer une paire clé-valeur d’un dictionnaire, nous allons utiliser la syntaxe suivante:

del dict[key]

Prenons le dictionnairejesse qui représente l'un des utilisateurs. Nous dirons que Jesse n'utilise plus la plate-forme en ligne pour jouer à des jeux, nous allons donc supprimer l'élément associé à la clé'points'. Ensuite, nous imprimerons le dictionnaire pour confirmer que l’élément a été supprimé:

jesse = {'username': 'JOctopus', 'online': False, 'points': 723, 'followers': 481}

del jesse['points']

print(jesse)
Output{'online': False, 'username': 'JOctopus', 'followers': 481}

La lignedel jesse['points'] supprime la paire clé-valeur'points': 723 du dictionnairejesse.

Si nous voulons effacer un dictionnaire de toutes ses valeurs, nous pouvons le faire avec la méthodedict.clear(). Cela gardera un dictionnaire donné au cas où nous aurions besoin de l'utiliser plus tard dans le programme, mais il ne contiendra plus aucun élément.

Supprimons tous les éléments du dictionnairejesse:

jesse = {'username': 'JOctopus', 'online': False, 'points': 723, 'followers': 481}

jesse.clear()

print(jesse)
Output{}

La sortie montre que nous avons maintenant un dictionnaire vide dépourvu de paires clé-valeur.

Si nous n'avons plus besoin d'un dictionnaire spécifique, nous pouvons utiliserdel pour s'en débarrasser complètement:

del jesse

print(jesse)

Lorsque nous exécutons un appel àprint() après la suppression du dictionnairejesse, nous recevons l'erreur suivante:

Output...
NameError: name 'jesse' is not defined

Étant donné que les dictionnaires sont des types de données modifiables, ils peuvent être ajoutés, modifiés et des éléments supprimés et effacés.

Conclusion

Ce tutoriel est passé à travers la structure de données du dictionnaire en Python. Les dictionnaires sont constitués de paires clé-valeur et permettent de stocker des données sans recourir à l'indexation. Cela nous permet de récupérer des valeurs en fonction de leur signification et de leur relation avec d'autres types de données.

À partir de là, vous pouvez en apprendre plus sur les autres types de données dans notre tutoriel «https://www.digitalocean.com/community/tutorials/understanding-data-types-in-python-3[Comprendre les types de données]».

Vous pouvez voir le type de données de dictionnaire utilisé dans les projets de programmation tels queweb scraping with Scrapy.