Comment copier un dictionnaire en Python

Dictionnaire en Python est une collection non ordonnée de valeurs, qui mappe un ensemble d’objets(clés) sur un autre ensemble d’objets(valeurs) contrairement aux autres types de données ne contenant qu’une seule valeur en tant que élément.
 
 
Lorsque nous affectons dictionnaireA = dictionnaireB, cette dernier fait référence au même dictionnaire. Dans ce tutoriel nous allons voir différents manières pour copier un dictionnaire vers un autre dictionnaire.
 

Méthode 1: Utiliser la méthode copy()

La méthode copy() retourne une copie superficielle du dictionnaire existant.

# Dictionnaire des langages
langage_dic = {
    "Python": 55,
    "Java" : 142,
    "PHP" : 32,
    "C" : 13,
} 

# En utilisant la méthode copy() pour copier un dictionnaire  
copy_dic = langage_dic.copy() 

# Afficher le dictionnaire initial 
print("Dictionnaire initial = ", langage_dic) 

# Afficher la copie du dictionnaire 
print("Copie du Dictionnaire = ", copy_dic)

Cela produit le résultat suivant:

Dictionnaire initial = {'Java': 142, 'C': 13, 'Python': 55, 'PHP': 32}
Copie du Dictionnaire = {'Java': 142, 'C': 13, 'Python': 55, 'PHP': 32}

 

Méthode 2: Utiliser le constructeur dict()

dict() est un constructeur qui crée un dictionnaire en Python.

# Dictionnaire des langages
langage_dic = {
    "Python": 55,
    "Java" : 142,
    "PHP" : 32,
    "C" : 13,
} 

# En utilisant le constructeur dict() pour copier un dictionnaire 
copy_dic = dict(langage_dic) 

# Afficher le dictionnaire initial 
print("Dictionnaire initial = ", langage_dic) 

# Afficher la copie du dictionnaire 
print("Copie du Dictionnaire = ", copy_dic)

Cela produit le résultat suivant:

Dictionnaire initial = {'Java': 142, 'C': 13, 'Python': 55, 'PHP': 32}
Copie du Dictionnaire = {'Java': 142, 'C': 13, 'Python': 55, 'PHP': 32}

 
 

Méthode 3: Utiliser la méthode dict.items()

items() retourne une séquence itérable de toutes les paires clé-valeur du dictionnaire.

# Dictionnaire des langages
langage_dic = {
    "Python": 55,
    "Java" : 142,
    "PHP" : 32,
    "C" : 13,
} 

# En utilisant dict.items() 
copy_dic = {key:value for key, value in langage_dic.items()} 

# Afficher le dictionnaire initial 
print("Dictionnaire initial = ", langage_dic) 

# Afficher la copie du dictionnaire 
print("Copie du Dictionnaire = ", copy_dic)

Cela produit le résultat suivant:

Dictionnaire initial = {'Java': 142, 'C': 13, 'Python': 55, 'PHP': 32}
Copie du Dictionnaire = {'Java': 142, 'C': 13, 'Python': 55, 'PHP': 32}

 
QCM Python

4 réflexions sur “Comment copier un dictionnaire en Python

  • mai 1, 2020 à 9:39 am
    Permalien

    Bonjour,
    Merci pour toutes ces méthodes de copie superficielle de dictionnaire ! Par contre lorsque les valeurs du dictionnaire sont des ensembles, la copie du dictionnaire par ces méthodes ne permet pas d’avoir, contre toute attente, une copie tout aussi superficielle de ses ensembles. Je ne comprends pas pourquoi.
    Par exemple:

    d3={'titi':{1,2},'toto':{2,3},'tutu':{3,4}}
    d4=d3.copy()
    d4['tutu'].add(5)
    print(d3)
    print(d4)

    Cela affichera:
    {‘titi’: {1, 2}, ‘toto’: {2, 3}, ‘tutu’: {3, 4, 5}}
    {‘titi’: {1, 2}, ‘toto’: {2, 3}, ‘tutu’: {3, 4, 5}}

    Répondre
    • mai 1, 2020 à 10:35 am
      Permalien

      dict.copy() est superficiel, s’il y a une liste imbriquée, ensemble, etc, des modifications seront appliquées aux deux. La méthode copy.deepcopy() évitera cela.

      import copy
      
      d3={'titi':{1,2},'toto':{2,3},'tutu':{3,4}}
      d4 = copy.deepcopy(d3)
      d4['tutu'].add(5)
      print(d3)
      print(d4)
      Répondre
  • mai 2, 2020 à 3:17 pm
    Permalien

    Merci Thomas. Je ne connaissais pas le module copy, ni sa super fonction deeptcopy().
    J’ai trouvé une autre solution, qui évite aussi l’import d’un module:
    Il suffit de faire la copie superficielle des ensembles inclus dans le dictionnaire. Cela peut se formuler, sous une syntaxe de compréhension (de dictionnaire et d’ensemble):

    d3={'titi':{1,2},'toto':{2,3},'tutu':{3,4}}
    d4 = {a: {b for b in d3[a]} for a in d3}
    d4['tutu'].add(5)
    print(d3)
    print(d4)
    Répondre
    • mai 2, 2020 à 3:19 pm
      Permalien

      Et le résultat attendu…
      {‘titi’: {1, 2}, ‘toto’: {2, 3}, ‘tutu’: {3, 4}}
      {‘titi’: {1, 2}, ‘toto’: {2, 3}, ‘tutu’: {3, 4, 5}}

      Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *