3 votes

vérifier deux dictionnaires dont les clés sont similaires mais les valeurs différentes

J'ai deux dictionnaires : dict1 et dict2. Le dict 2 est toujours de la même longueur alors que le dict1 a une longueur variable. Les deux dictionnaires sont les suivants :

dict2 = {"name":"martin","sex":"male","age":"97","address":"blablabla"}

dict1 = {"name":"falak", "sex":"female"}

Je veux créer un troisième dictionnaire basé sur les deux dict1 et dict2. Le dict3 contiendra toutes les valeurs du dict2. Mais toutes les clés qui existent dans le dict1 seront remplacées. Voici le dict3 résultant

dict3 = {"name":"falak","sex":"female","age":"97","address":"blablabla"}

Je peux le faire avec plusieurs instructions if, mais je voudrais une méthode plus intelligente. Je ne sais pas si quelqu'un peut me guider à ce sujet.

11voto

Jon Clements Points 51556

Avez-vous essayé ?

dict3 = dict(dict2, **dict1)

Ou bien :

dict3 = dict2.copy()
dict3.update(dict1)

1voto

Mariano Anaya Points 141
import copy
dict3 = copy.copy(dict2)
dict3.update(dict1)

0voto

sharth Points 25625

A partir de la documentation python :

update([other])

  • Mettre à jour le dictionnaire avec les paires clé/valeur des autres, en écrasant les clés existantes.
  • Retourne Aucun.
  • update() accepte soit un autre objet dictionnaire, soit un itérable de paires clé/valeur (sous forme de tuples ou d'autres itérables de longueur deux). Si des arguments de type mot-clé sont spécifiés, le dictionnaire est alors mis à jour avec ces paires clé/valeur : d.update(red=1, blue=2).
  • Modifié dans la version 2.4 : permet à l'argument d'être un itérable de paires clé/valeur et autorise les arguments de type mot-clé.

Ainsi :

dict1.update(dict2)

0voto

antitrust Points 4853

Tout d'abord, vous ajoutez des éléments de d1 dont les clés ne sont pas présentes dans d2. Toutes les autres clés de d1 se trouvent dans d2.

Ensuite, vous ajoutez toutes les clés de d2, avec la valeur de d2 si une telle clé n'existe pas dans d1, avec la valeur de d1 si la clé existe dans d1.

dict2 = {"name":"martin","sex":"male","age":"97","address":"blablabla"}
dict1 = {"name":"falak", "sex":"female"}

dic = dict()

for key, val in dict1.items():
  if key not in dict2.keys():
    dic[key] = val

for key, val in dict2.items():
  if key not in dict1.keys():
    dic[key] = val
  else:
    dic[key] = dict1[key]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X