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}
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:
Cela affichera:
{‘titi’: {1, 2}, ‘toto’: {2, 3}, ‘tutu’: {3, 4, 5}}
{‘titi’: {1, 2}, ‘toto’: {2, 3}, ‘tutu’: {3, 4, 5}}
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.
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):
Et le résultat attendu…
{‘titi’: {1, 2}, ‘toto’: {2, 3}, ‘tutu’: {3, 4}}
{‘titi’: {1, 2}, ‘toto’: {2, 3}, ‘tutu’: {3, 4, 5}}