举例讲解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 相关文章推荐
仅利用30行Python代码来展示X算法
Apr 01 Python
python读取excel表格生成erlang数据
Aug 26 Python
Django 2.0版本的新特性抢先看!
Jan 05 Python
Python使用MD5加密算法对字符串进行加密操作示例
Mar 30 Python
VScode编写第一个Python程序HelloWorld步骤
Apr 06 Python
浅谈python3.6的tkinter运行问题
Feb 22 Python
python suds访问webservice服务实现
Jun 26 Python
解决Keras中CNN输入维度报错问题
Jun 29 Python
Python tempfile模块生成临时文件和临时目录
Sep 30 Python
Python中random模块常用方法的使用教程
Oct 04 Python
python四个坐标点对图片区域最小外接矩形进行裁剪
Jun 04 Python
python 爬取天气网卫星图片
Jun 07 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源代码数组统计count分析
2011/08/02 PHP
PHP转换文件夹下所有文件编码的实现代码
2013/06/06 PHP
用PHP代码在网页上生成图片
2015/07/01 PHP
CI框架实现cookie登陆的方法详解
2016/05/18 PHP
PHP hex2bin()函数用法讲解
2019/02/25 PHP
PHP7 新增常量
2021/03/09 PHP
AeroWindow 基于JQuery的弹出窗口插件
2011/06/27 Javascript
JS中window.open全屏命令解析及使用示例
2013/12/11 Javascript
JS获取单击按钮单元格所在行的信息
2014/06/17 Javascript
jquery获取css的color值返回RGB的方法
2015/12/18 Javascript
JavaScript判断数组重复内容的两种方法(推荐)
2016/06/06 Javascript
Jquery AJAX POST与GET之间的区别详细介绍
2016/10/17 Javascript
浅谈js继承的实现及公有、私有、静态方法的书写
2016/10/28 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
2016/11/25 Javascript
es6学习笔记之Async函数基本教程
2017/05/11 Javascript
Vue-Cli中自定义过滤器的实现代码
2017/08/12 Javascript
vue绑定设置属性的多种方式(5)
2017/08/16 Javascript
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
2019/02/02 NodeJs
Vue中通过属性绑定为元素绑定style行内样式的实例代码
2020/04/30 Javascript
[01:45]IMBATV TI4前线报道-选手到达
2014/07/07 DOTA
python中使用urllib2伪造HTTP报头的2个方法
2014/07/07 Python
Python中的对象,方法,类,实例,函数用法分析
2015/01/15 Python
Flask框架各种常见装饰器示例
2018/07/17 Python
对Python subprocess.Popen子进程管道阻塞详解
2018/10/29 Python
对Python之gzip文件读写的方法详解
2019/02/08 Python
Django ModelForm操作及验证方式
2020/03/30 Python
Python Celery异步任务队列使用方法解析
2020/08/10 Python
使用CSS3来绘制一个月食图案
2015/07/18 HTML / CSS
碧欧泉Biotherm加拿大官方网站:法国高端护肤品牌
2019/10/18 全球购物
weblogic面试题
2016/03/07 面试题
小学生环保倡议书
2014/05/15 职场文书
2015大学生求职信范文
2015/03/20 职场文书
初中班级口号霸气押韵
2015/12/24 职场文书
中职班主任培训心得体会
2016/01/07 职场文书
CSS3实现指纹特效代码
2022/03/17 HTML / CSS
世界十大动漫制作公司排行榜,迪士尼上榜,第二是美国代表性文化符
2022/03/18 欧美动漫