举例讲解Python中字典的合并值相加与异或对比


Posted in Python onJune 04, 2016

字典合并值相加
在统计汇总游戏数据的时候,有些数据是是每天用字典存的,当我要对多天汇总的时候,就需要合并字典了。
如果key相同的话它们的值就相加。
不能用update方法,因为用update方法则相同的key的值会覆盖,而不是相加。
千言不如一码。

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)

 
输出

{'a': 2, 'c': 3, 'b': 5, 'd': 4}

sum([obj.keys() for obj in objs],[])这句可能不太好理解。
其实sum()函数也有"鲜为人知的参数",即第2个参数,start参数,默认是0。
而且不止可以是int类型,还可以是其他支持+操作符的东西,比如[]。
利用这一点,可以对二层数组打平成一层。
比如

>>sum([[1,2,3],[4,5]],[])
[1,2,3,4,5]

对字典diff("异或")
在游戏中,我要监控记录物品系统中的背包变动情况。("异或"的结果是相同的消除,剩下不同的,即变动的)
假设背包的存储结构是这样的。
是一个字典,{物品id:数量}。
在背包类初始化的时候,把背包物品信息copy保存到一个oldbag变量,进行一些物品操作后(比如使用物品,领取物品奖励等),在调用save()方法存进redis时,对新的bag字典与oldbag字典进行差异对比就得出变动情况了。
千言不如一码。

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)

输出

{'b': 1, 'd': 4,'c': -3}

代表玩家得到了1个'b'物品,4个'd'物品,失去了3个'c'物品。

Python 相关文章推荐
vc6编写python扩展的方法分享
Jan 17 Python
Python import用法以及与from...import的区别
May 28 Python
合并百度影音的离线数据( with python 2.3)
Aug 04 Python
Python递归函数定义与用法示例
Jun 02 Python
python实现Decorator模式实例代码
Feb 09 Python
对python 各种删除文件失败的处理方式分享
Apr 24 Python
用Python批量把文件复制到另一个文件夹的实现方法
Aug 16 Python
Python散点图与折线图绘制过程解析
Nov 30 Python
python+tifffile之tiff文件读写方式
Jan 13 Python
python程序文件扩展名知识点详解
Feb 27 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
Jul 30 Python
opencv深入浅出了解机器学习和深度学习
Mar 17 Python
详解Python中open()函数指定文件打开方式的用法
Jun 04 #Python
Python中import导入上一级目录模块及循环import问题的解决
Jun 04 #Python
Python输出汉字字库及将文字转换为图片的方法
Jun 04 #Python
使用Python的Flask框架来搭建第一个Web应用程序
Jun 04 #Python
Python的Django中将文件上传至七牛云存储的代码分享
Jun 03 #Python
详解duck typing鸭子类型程序设计与Python的实现示例
Jun 03 #Python
详解字典树Trie结构及其Python代码实现
Jun 03 #Python
You might like
php设计模式 Strategy(策略模式)
2011/06/26 PHP
php中动态变量用法实例
2015/06/10 PHP
php编程每天必学之表单验证
2016/03/01 PHP
JS下拉缓冲菜单示例代码
2013/08/30 Javascript
在页面中js获取光标/鼠标的坐标及光标的像素坐标
2013/11/11 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
jQuery内部原理和实现方式浅析
2015/02/03 Javascript
AngularJS中实现动画效果的方法
2016/07/28 Javascript
bootstrap实现二级下拉菜单效果
2017/11/23 Javascript
JavaScript中变量提升与函数提升经典实例分析
2018/07/26 Javascript
vue单页面实现当前页面刷新或跳转时提示保存
2018/11/02 Javascript
vue项目中实现的微信分享功能示例
2019/01/21 Javascript
vue踩坑记录之数组定义和赋值问题
2019/03/20 Javascript
小程序关于请求同步的总结
2019/05/05 Javascript
vue父组件触发事件改变子组件的值的方法实例详解
2019/05/07 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
vue监听浏览器原生返回按钮,进行路由转跳操作
2020/09/09 Javascript
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
Python struct模块解析
2014/06/12 Python
Python中使用Beautiful Soup库的超详细教程
2015/04/30 Python
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
使用Python实现跳一跳自动跳跃功能
2019/07/10 Python
MxNet预训练模型到Pytorch模型的转换方式
2020/05/25 Python
加拿大领先的优质厨具产品在线购物网站:Golda’s Kitchen
2017/11/17 全球购物
澳大利亚最受欢迎的女士度假服装:Kabana Shop
2020/10/10 全球购物
Unineed中文官网:高端护肤美妆与时尚配饰,英国直邮
2020/07/23 全球购物
交警个人先进事迹材料
2014/05/11 职场文书
主要领导对照检查材料
2014/08/26 职场文书
教师年度个人总结
2015/02/11 职场文书
2015年世界粮食日演讲稿
2015/03/20 职场文书
2016元旦文艺汇演主持词
2015/07/06 职场文书
军训新闻稿范文
2015/07/17 职场文书
导游词之江苏同里古镇
2019/11/18 职场文书
如何理解Vue前后端数据交互与显示
2021/05/10 Vue.js
Python中使用tkFileDialog实现文件选择、保存和路径选择
2022/05/20 Python