Maison > développement back-end > Tutoriel Python > Ajout et comparaison XOR des valeurs fusionnées des dictionnaires en Python

Ajout et comparaison XOR des valeurs fusionnées des dictionnaires en Python

高洛峰
Libérer: 2017-03-03 15:18:26
original
1744 Les gens l'ont consulté

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)
Copier après la connexion


Sortie

{'a': 2, 'c': 3, 'b': 5, 'd': 4}
Copier après la connexion

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]
Copier après la connexion

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)
Copier après la connexion

Sortie

{'b': 1, 'd': 4,'c': -3}
Copier après la connexion

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 !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal