Ajouter des valeurs fusionnées dans un dictionnaire
Lors du résumé des données de jeu, certaines données sont stockées chaque jour dans des dictionnaires. Lorsque je souhaite résumer plusieurs jours, vous devez fusionner les dictionnaires.
Si les clés sont les mêmes, leurs valeurs sont ajoutées.
Vous ne pouvez pas utiliser la méthode de mise à jour, car si vous utilisez la méthode de mise à jour, les valeurs de la même clé seront écrasées au lieu d'être ajoutées.
Mille mots valent un mètre.
def union_dict(*objs): _keys = set(sum([obj.keys() for obj in objs],[])) _total = {} for _key in _keys: _total[_key] = sum([obj.get(_key,0) for obj in objs]) return _total obj1 = {'a':1,'b':2,'c':3} obj2 = {'a':1,'b':3,'d':4} print union_dict(obj1,obj2)
Sortie
{'a': 2, 'c': 3, 'b': 5, 'd': 4}
sum([obj.keys() for obj in objs],[]) n'est peut-être pas facile à comprendre.
En fait, la fonction sum() a également des "paramètres peu connus", c'est-à-dire le deuxième paramètre, le paramètre start, qui est par défaut 0.
Et cela peut non seulement être de type int, mais aussi d'autres éléments prenant en charge les opérateurs, tels que [].
Grâce à cela, le tableau à deux niveaux peut être aplati en un seul niveau.
Par exemple
>>sum([[1,2,3],[4,5]],[]) [1,2,3,4,5]
Dictionnaire diff("XOR")
Dans le jeu, je souhaitez surveiller et enregistrer les modifications apportées au sac à dos dans le système d'articles. (Le résultat de "XOR" est que les mêmes sont éliminés, laissant les différents, c'est-à-dire modifiés)
Supposons que la structure de stockage du sac à dos soit comme ceci.
est un dictionnaire, {identifiant de l'article : quantité}.
Lors de l'initialisation de la classe backpack, copiez et enregistrez les informations sur l'élément du sac à dos dans une variable oldbag après avoir effectué certaines opérations sur l'élément (telles que l'utilisation d'objets, la réception de récompenses d'objet, etc.), lorsque vous appelez la méthode save() pour enregistrer dans. redis, le nouveau Comparez la différence entre le dictionnaire bag et le dictionnaire oldbag pour obtenir les modifications.
Mille mots valent un mètre.
def symmetric_difference(_oldobj,_newobj): _oldkeys = _oldobj.keys() _newkeys = _newobj.keys() _diff = {} for _key in set(_oldkeys + _newkeys): _val = _newobj.get(_key,0) - _oldobj.get(_key,0) if _val: _diff[_key] = _val return _diff oldobj = {'a':1,'b':2,'c':3} newobj = {'a':1,'b':3,'d':4} print symmetric_difference(oldobj,newobj)
Sortie
{'b': 1, 'd': 4,'c': -3}
représente Le joueur a gagné 1 objet « b », 4 objets « d » et a perdu 3 objets « c ».
Pour plus d'articles liés à l'ajout et à la comparaison XOR de valeurs fusionnées dans les dictionnaires en Python, veuillez faire attention au site Web PHP chinois !