举例讲解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 相关文章推荐
python实现将pvr格式转换成pvr.ccz的方法
Apr 28 Python
Python使用matplotlib绘制动画的方法
May 20 Python
详解在Python中处理异常的教程
May 24 Python
Python语言生成水仙花数代码示例
Dec 18 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
Jan 09 Python
python利用socketserver实现并发套接字功能
Jan 26 Python
Django中的CBV和FBV示例介绍
Feb 25 Python
python3爬虫获取html内容及各属性值的方法
Dec 17 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
Jun 04 Python
利用Python实现手机短信监控通知的方法
Jul 22 Python
Python模块 _winreg操作注册表
Feb 05 Python
Python如何输出警告信息
Jul 30 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批量删除数据库下所有前缀为prefix_的表
2014/06/09 PHP
配置php.ini实现PHP文件上传功能
2014/11/27 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
JavaScript的Cookies
2008/01/16 Javascript
JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)
2011/07/04 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
JQuery实现点击div以外的位置隐藏该div窗口
2013/09/13 Javascript
js图片轮播特效代码分享
2015/09/07 Javascript
js简单实现图片延迟加载的方法
2016/07/19 Javascript
Javascrip实现文字跳动特效
2016/11/27 Javascript
微信小程序 图片绝对定位(背景图片)
2017/04/05 Javascript
Javascript实现页面滚动时导航智能定位
2017/05/06 Javascript
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
2018/09/08 Javascript
vue 之 css module的使用方法
2018/12/04 Javascript
layui原生表单验证的实例
2019/09/09 Javascript
详解JavaScript修改注册表的方法
2020/01/05 Javascript
JS+CSS+HTML实现“代码雨”类似黑客帝国文字下落效果
2020/03/17 Javascript
解决vue项目获取dom元素宽高总是不准确问题
2020/07/29 Javascript
Element-ui upload上传文件限制的解决方法
2021/01/22 Javascript
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
Python ORM框架SQLAlchemy学习笔记之数据查询实例
2014/06/10 Python
Python判断变量是否已经定义的方法
2014/08/18 Python
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
2016/04/24 Python
python模块之paramiko实例代码
2018/01/31 Python
对Python中数组的几种使用方法总结
2018/06/28 Python
学习python分支结构
2019/05/17 Python
Keras之自定义损失(loss)函数用法说明
2020/06/10 Python
Python requests模块安装及使用教程图解
2020/06/30 Python
Johnson Fitness澳大利亚:高级健身器材
2021/03/16 全球购物
中文专业学生自我评价范文
2014/02/06 职场文书
小学感恩教育活动总结
2014/07/07 职场文书
党的群众路线教育实践活动心得体会范文
2014/11/05 职场文书
售票员岗位职责
2015/02/15 职场文书
2015高中教师个人工作总结
2015/07/21 职场文书