Home >Backend Development >Python Tutorial >Addition and XOR comparison of merged values of dictionaries in Python
Add dictionary merged values
When statistically summarizing game data, some data are stored in dictionaries every day. When I want to summarize multiple days , you need to merge dictionaries.
If the keys are the same, their values are added.
You cannot use the update method, because if you use the update method, the values of the same key will be overwritten instead of added.
A thousand words are worth a yard.
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)
Output
{'a': 2, 'c': 3, 'b': 5, 'd': 4}
sum( [obj.keys() for obj in objs],[]) This sentence may not be easy to understand.
In fact, the sum() function also has "little-known parameters", that is, the second parameter, the start parameter, which defaults to 0.
And it can not only be of int type, but also other things that support the + operator, such as [].
Using this, the two-layer array can be flattened into one layer.
For example
>>sum([[1,2,3],[4,5]],[]) [1,2,3,4,5]
Dictionary diff("XOR")
In the game, I want Monitor and record backpack changes in the item system. (The result of "XOR" is that the same ones are eliminated, and the remaining ones are different, that is, changed)
Assume that the storage structure of the backpack is like this.
is a dictionary, {item id: quantity}.
When the backpack class is initialized, copy the backpack item information to an oldbag variable. After performing some item operations (such as using items, receiving item rewards, etc.), when calling the save() method to save it into redis, the new Compare the differences between the bag dictionary and the oldbag dictionary to get the changes.
A thousand words are worth a yard.
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)
Output
{'b': 1, 'd': 4,'c': -3}
means the player got 1 'b' items, 4 'd' items, and 3 'c' items lost.
For more articles related to the addition and XOR comparison of merged values of dictionaries in Python, please pay attention to the PHP Chinese website!