2016-10-02 1 views
1

Disons que j'avais ces deux dictionnaires, les deux contenant des clés semblables les unes aux autres:L'identification et l'ajout de valeurs de dict à un autre dict, alors que les deux contiennent les clés similaires

d_1 = {'a': 3, 'b': 4, 'c': 1} 

d_2 = {'a': 5, 'b': 6, 'c': 9, 'd': 7} 

Maintenant, disons que je veux prendre les valeurs de d_1 et ajoutez-les aux valeurs correspondantes de d_2. Comment est-ce que j'ajouterais les valeurs de la clé de d_1 à la clé respective dans d_2 sans dire individuellement d_2['a'] += d_1['a'] pour chaque clé? Comment pourrais-je écrire une fonction qui peut prendre deux dicts, comparer leurs clés, et ajouter ces valeurs aux valeurs de clé existantes identiques dans une autre dict?

Par exemple, si j'avais une classe nommée player et qu'elle avait un attribut de skills qui contient plusieurs compétences et leurs valeurs, par ex. Maintenant, si ce player devait rencontrer un ensemble d'armure, ou quoi que ce soit, qui buffait des compétences spécifiques, comment pourrais-je prendre ce dictionnaire de buff, voir quelles clés il a en commun avec l'attribut de player, et ajoutez les valeurs respectives?

+0

Je pense que itérer clés dans D_1 et mettre à jour les valeurs pertinentes dans D_2 (comme vous le suggérez) est la meilleure façon; Y at-il une raison pour laquelle vous n'aimez pas cette approche? – Akavall

Répondre

3

Pour chaque clé de d_2, vérifiez si elles sont dans d_1, si c'est le cas, additionnez-les.

for key in d_2: if key in d_1: d_2[key] += d_1[key]

Il vous semble voulez construire un jeu, vous pourriez ne pas vouloir jouer avec l'attribut du joueur. les additionner et mettre le résultat à une nouvelle dict serait mieux. De plus, vous pouvez ajouter plus de deux dict ensemble, car vous pourriez avoir plus d'un buff.

for key in player: outcome[key] = 0 for buff in buffs: if key in buff: outcome[key] += buff[key] outcome[key] += player[key]