举例讲解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 相关文章推荐
C#返回当前系统所有可用驱动器符号的方法
Apr 18 Python
Python中运算符"=="和"is"的详解
Oct 08 Python
Python numpy生成矩阵、串联矩阵代码分享
Dec 04 Python
python实现TF-IDF算法解析
Jan 02 Python
Python通过OpenCV的findContours获取轮廓并切割实例
Jan 05 Python
Python爬虫中urllib库的进阶学习
Jan 05 Python
Django框架使用内置方法实现登录功能详解
Jun 12 Python
K最近邻算法(KNN)---sklearn+python实现方式
Feb 24 Python
Python2 与Python3的版本区别实例分析
Mar 30 Python
keras 使用Lambda 快速新建层 添加多个参数操作
Jun 10 Python
Python Celery异步任务队列使用方法解析
Aug 10 Python
python简单实现9宫格图片实例
Sep 03 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
解析link_mysql的php版
2013/06/30 PHP
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
2014/01/03 PHP
Zend Framework教程之Loader以及PluginLoader用法详解
2016/03/09 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
2019/07/15 PHP
解放web程序员的输入验证
2006/10/06 Javascript
页面中js执行顺序
2009/11/09 Javascript
一些主流JS框架中DOMReady事件的实现小结
2011/02/12 Javascript
php析构函数的具体用法小结
2014/03/11 Javascript
如何获取网站icon有哪些可行的方法
2014/06/05 Javascript
一段非常简单的js判断浏览器的内核
2014/08/17 Javascript
jQuery插件pagination实现无刷新分页
2016/05/21 Javascript
详解AngularJS如何实现跨域请求
2016/08/22 Javascript
vue2 自定义动态组件所遇到的问题
2017/06/08 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
web前端vue filter 过滤器
2018/01/12 Javascript
vue 2.0 购物车小球抛物线的示例代码
2018/02/01 Javascript
QRCode.js二维码生成并能长按识别
2018/10/16 Javascript
js如何实现元素曝光上报
2019/08/07 Javascript
小程序实现上下移动切换位置
2019/09/23 Javascript
Javascript实现鼠标移入方向感知
2020/06/24 Javascript
Python下的Mysql模块MySQLdb安装详解
2014/04/09 Python
用Python实现命令行闹钟脚本实例
2016/09/05 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
2018/10/21 Python
解决python Jupyter不能导入外部包问题
2020/04/15 Python
Django数据模型中on_delete使用详解
2020/11/30 Python
wedgwood加拿大官网:1759年成立的英国国宝级陶瓷餐具品牌
2018/07/17 全球购物
Nike德国官网:Nike.com (DE)
2018/11/13 全球购物
Jacadi Paris英国官网:法国童装品牌
2019/08/09 全球购物
新闻专业毕业生求职信
2014/08/08 职场文书
教师三严三实心得体会
2014/10/11 职场文书
2014年帮扶工作总结
2014/11/26 职场文书
个人先进事迹总结
2015/02/26 职场文书
《爬天都峰》教学反思
2016/02/23 职场文书
python绘图subplots函数使用模板的示例代码
2021/04/30 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
2022/04/04 Python