Python : Opérateur in et méthodes get(), copy() et clear()

De www.yakakliker.org

Tester l'existence d'une clé

personne = {
    'nom': 'dupont',
    'prenom': 'jean'
}
print(personne['age'])  # KeyError: 'age'

La plupart du temps ce n'est pas souhaitable et pour cette raison nous utilisons l'opérateur in ou la méthode get().

Utilisation de l'opérateur in

Le plus souvent nous utiliserons l'opérateur in pour vérifier l'existence d'une clé dans un dictionnaire :

personne = {
    'nom': 'dupont',
    'prenom': 'jean'
}

if 'age' in personne:
    print(personne['age'])
else:
    print('Pas d\'âge')

Utilisation de la méthode get()

La méthode get() permet d'accéder à la valeur associée à une clé dans un dictionnaire mais ne retourne pas d'erreur si la clé n'existe pas :

personne = {
    'nom': 'dupont',
    'prenom': 'jean'
}

print(personne.get('age'))  # None

On peut également indiquer à .get() une valeur par défaut en deuxième argument :

personne = {
    'nom': 'dupont',
    'prenom': 'jean'
}

print(personne.get('age', 0))  # 0

La méthode clear()

La méthode clear() permet de supprimer tous les éléments d'un dictionnaire.

personne = {
    'nom': 'dupont',
    'prenom': 'jean'
}
personne.clear()
print(personne)  # {}

Copier un dictionnaire

Pour la même raison que les listes, il faut faire la différence entre copie superficielle et copie profonde.

Copie superficielle d'un dictionnaire

La méthode copy() permet de créer une copie superficielle pour les dictionnaires contenant uniquement des valeurs immuables.

personne = {
    'nom': 'dupont',
    'prenom': 'jean'
}
personne2 = personne.copy()

print(personne)  # {'nom': 'dupont', 'prenom': 'jean'}
print(personne2)  # {'nom': 'dupont', 'prenom': 'jean'}
print(personne is personne2)  # False
print(personne == personne2)  # True

La copie superficielle est bien un objet différent du dictionnaire copié qui comprend les mêmes paires de clé / valeur.

Copie profonde d'un dictionnaire

La méthode copy() permet de créer une copie superficielle pour les dictionnaires contenant uniquement des valeurs immuables.

Pour rappel, si un type mutable se trouve dans le dictionnaire copié, une copie par référence sera effectuée. Cela entraînera qu'une modification de l'objet sera répercuté dans toutes les copies superficielles également, et réciproquement :

personne = {
    'nom': 'dupont',
    'prenom': 'jean',
    'adresse': {
        'ville': 'paris'
    }
}
personne2 = personne.copy()

personne['adresse']['ville'] = 'lyon'

print(personne)
# {'nom': 'dupont', 'prenom': 'jean', 'adresse': {'ville': 'lyon'}}
print(personne2)
# {'nom': 'dupont', 'prenom': 'jean', 'adresse': {'ville': 'lyon'}}

Il faut donc effectuer une copie profonde dans ce cas :

import copy
personne = {
    'nom': 'dupont',
    'prenom': 'jean',
    'adresse': {
        'ville': 'paris'
    }
}
personne2 = copy.deepcopy(personne)

personne['adresse']['ville'] = 'lyon'

print(personne)
# {'nom': 'dupont', 'prenom': 'jean', 'adresse': {'ville': 'lyon'}}
print(personne2)
# {'nom': 'dupont', 'prenom': 'jean', 'adresse': {'ville': 'paris'}}


compteur web gratuit sans pub