Python problème dictionnaire

Résolu/Fermé
Flayme - Modifié le 18 déc. 2022 à 17:53
 Flayme - 18 déc. 2022 à 22:28

Bonjour,

pourquoi mes dictionnaires changent tout les deux alors que je fais aucune opération sur un ?

mon code:

def main(names):
    data = {"A": {"up": 1, "down": 2, "right": 3, "left": 4}, "B": {"up": 5, "down": 5, "right": 6, "left": 7}}
    inps = data.copy()
    for letter, key in tuple(data.items()):
        for name, k in tuple(key.items()):
            inps[letter][names[name]] = "ok"
            inps[letter].pop(name)
    print(inps == data)
    print(inps)
    print(data)
    
if __name__ == "__main__":
    main({"up": "haut", "down": "bas", "right": "droite", "left": "gauche"})

(k n'est pas utilisé car j'ai envoyé un exemple)

merci pour votre aide

A voir également:

4 réponses

Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
17 déc. 2022 à 13:58

Bonjour,

au lieu de copy, regarde plutôt du coté de deepcopy pour faire une copie vraiment indépendante

1

merci d'avoir répondu

0

J'ai trouvé la solution:

def main(names):
    data = {"A": {"up": 1, "down": 2, "right": 3, "left": 4}, "B": {"up": 5, "down": 5, "right": 6, "left": 7}}
    inps = {}
    for letter, key in tuple(data.items()):
        inps[letter] = {}
        for name, k in tuple(key.items()):
            inps[letter][names[name]] = "ok"
            # inps[letter].pop(name)
    print(inps == data)
    print(inps)
    print(data)
    
if __name__ == "__main__":
    main({"up": "haut", "down": "bas", "right": "droite", "left": "gauche"})
0

Bonsoir, la solution, Phil_1857 te l'a donnée, inutile de réinventer la roue.

from copy import deepcopy

data = {
    "A": {"up": 1, "down": 2, "right": 3, "left": 4},
    "B": {"up": 5, "down": 5, "right": 6, "left": 7},
}
inps = deepcopy(data)
1
Flayme > hufy
18 déc. 2022 à 22:23

je l'ai créer avant de lire le commentaire

0

je sais pas comment fermer une question donc si il y a un modérateur vous pouvez la fermer svp.

0

en fait j'ai trouver et c'est déjà fait (merci)

0