举例讲解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 相关文章推荐
简介Django中内置的一些中间件
Jul 24 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
May 17 Python
Python 自动刷博客浏览量实例代码
Jun 14 Python
python爬虫实例详解
Jun 19 Python
python实现定时提取实时日志程序
Jun 22 Python
对python实时得到鼠标位置的示例讲解
Oct 14 Python
Python后台开发Django会话控制的实现
Apr 15 Python
python按比例随机切分数据的实现
Jul 11 Python
Django Rest framework频率原理与限制
Jul 26 Python
完美解决jupyter由于无法import新包的问题
May 26 Python
Python通过类的组合模拟街道红绿灯
Sep 16 Python
python 如何上传包到pypi
Dec 24 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
session在PHP大型web应用中的使用
2011/06/25 PHP
php缓冲输出实例分析
2015/01/05 PHP
php数组合并与拆分实例分析
2015/06/12 PHP
php常量详细解析
2015/10/27 PHP
CodeIgniter针对数据库的连接、配置及使用方法
2016/03/03 PHP
Laravel实现构造函数自动依赖注入的方法
2016/03/16 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
2018/10/15 PHP
基于jQuery实现多层次的手风琴效果附源码
2015/09/21 Javascript
JS模拟的Map类实现方法
2016/06/17 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
2016/07/25 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
Vue2.0实现1.0的搜索过滤器功能实例代码
2017/03/20 Javascript
Javascript 编码约定(编码规范)
2018/03/11 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
2019/12/30 jQuery
JS如何在数组指定位置插入元素
2020/03/10 Javascript
如何实现js拖拽效果及原理解析
2020/05/08 Javascript
Python中AND、OR的一个使用小技巧
2015/02/18 Python
使用C语言扩展Python程序的简单入门指引
2015/04/14 Python
Python Nose框架编写测试用例方法
2017/10/26 Python
python编程线性回归代码示例
2017/12/07 Python
Python学习之Anaconda的使用与配置方法
2018/01/04 Python
python爬虫爬取网页表格数据
2018/03/07 Python
selenium跳过webdriver检测并模拟登录淘宝
2019/06/12 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
PyQt5多线程防卡死和多窗口用法的实现
2020/09/15 Python
python实现扫雷游戏的示例
2020/10/20 Python
使用canvas生成含有微信头像的邀请海报没有微信头像问题
2019/10/29 HTML / CSS
劳动竞赛口号
2014/06/16 职场文书
房屋出租委托书格式
2014/09/23 职场文书
小学生校园广播稿
2014/09/28 职场文书
预备党员介绍人意见
2015/06/01 职场文书
2015年中秋晚会主持词
2015/07/01 职场文书
2015年信息化建设工作总结
2015/07/23 职场文书
小学生安全教育心得体会
2016/01/15 职场文书
导游词之镇江-金山寺
2019/10/14 职场文书