举例讲解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中的正则表达式的用法
Apr 09 Python
Django实现简单分页功能的方法详解
Dec 05 Python
Python 隐藏输入密码时屏幕回显的实例
Feb 19 Python
python实现Virginia无密钥解密
Mar 20 Python
Python函数装饰器原理与用法详解
Aug 16 Python
Python3和PyCharm安装与环境配置【图文教程】
Feb 14 Python
安装多个版本的TensorFlow的方法步骤
Apr 21 Python
python中判断文件结束符的具体方法
Aug 04 Python
Python Sqlalchemy如何实现select for update
Oct 12 Python
Python Socket多线程并发原理及实现
Dec 11 Python
python基础详解之if循环语句
Apr 24 Python
python 如何获取页面所有a标签下href的值
May 06 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
变量在 PHP7 内部的实现(一)
2015/12/21 PHP
PHP实现实时生成并下载超大数据量的EXCEL文件详解
2017/10/23 PHP
JavaScript入门教程(5) js Screen屏幕对象
2009/01/31 Javascript
jQuery Animation实现CSS3动画示例介绍
2013/08/14 Javascript
javascript控制Div层透明属性由浅变深由深变浅逐渐显示
2013/11/12 Javascript
node.js中的fs.appendFile方法使用说明
2014/12/17 Javascript
jQuery中triggerHandler()方法用法实例
2015/01/19 Javascript
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
jquery实现删除一个元素后面的所有元素功能
2015/12/21 Javascript
Bootstrap table分页问题汇总
2016/05/30 Javascript
jQuery插件EasyUI设置datagrid的checkbox为禁用状态的方法
2016/08/05 Javascript
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
jQuery实现ajax回调函数带入参数的方法示例
2018/06/26 jQuery
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
2018/10/23 Javascript
使用webpack搭建vue项目实现脚手架功能
2019/03/15 Javascript
json解析大全 双引号、键值对不在一起的情况
2019/12/06 Javascript
js+css实现全屏侧边栏
2020/06/16 Javascript
Python3 实现文件批量重命名示例代码
2019/06/03 Python
pandas DataFrame 交集并集补集的实现
2019/06/24 Python
python使用paramiko模块通过ssh2协议对交换机进行配置的方法
2019/07/25 Python
Python3.7安装keras和TensorFlow的教程图解
2020/06/18 Python
python itsdangerous模块的具体使用方法
2020/02/17 Python
Python中socket网络通信是干嘛的
2020/05/27 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
Ubuntu权限不足无法创建文件夹解决方案
2020/11/14 Python
英国在线自行车商店:Evans Cycles
2016/09/26 全球购物
Boden美国官网:英伦原创时装品牌
2017/07/03 全球购物
加拿大奢华时装品牌:Mackage
2018/01/10 全球购物
创业计划书——互联网商机
2014/01/12 职场文书
护理专业毕业生自荐书
2014/05/24 职场文书
地理科学专业自荐信
2014/09/01 职场文书
人事代理委托书
2014/09/27 职场文书
试用期转正工作总结2015
2015/05/28 职场文书
小学语文课《掌声》教学反思
2016/03/03 职场文书
Python基础之条件语句详解
2021/06/16 Python