举例讲解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 内置函数complex详解
Oct 23 Python
Python3.4编程实现简单抓取爬虫功能示例
Sep 14 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
Apr 21 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
Sep 04 Python
简单了解Python matplotlib线的属性
Jun 29 Python
Win10下Python3.7.3安装教程图解
Jul 08 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
Jul 23 Python
详解Django3中直接添加Websockets方式
Feb 12 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
Mar 08 Python
python中的错误如何查看
Jul 08 Python
教你怎么用Python实现多路径迷宫
Apr 29 Python
asyncio异步编程之Task对象详解
Mar 13 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
ip签名探针
2006/10/09 PHP
一篇入门的php Class 文章
2007/04/04 PHP
一步一步学习PHP(5) 类和对象
2010/02/16 PHP
php生成excel列序号代码实例
2013/12/24 PHP
php调用C代码的实现方法
2014/03/11 PHP
thinkPHP5.0框架命名空间详解
2017/03/18 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
javascript parseInt与Number函数的区别
2010/01/21 Javascript
js中关于String对象的replace使用详解
2011/05/24 Javascript
JavaScript高级程序设计 阅读笔记(七) ECMAScript中的语句
2012/02/27 Javascript
JavaScript排序算法之希尔排序的2个实例
2014/04/04 Javascript
JavaScript实现的链表数据结构实例
2015/04/02 Javascript
JS实现touch 点击滑动轮播实例代码
2017/01/19 Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
2017/07/21 Javascript
webpack3+React 的配置全解
2017/08/21 Javascript
[01:11:21]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第三场 3月7日
2021/03/11 DOTA
videocapture库制作python视频高速传输程序
2013/12/23 Python
Python中设置变量作为默认值时容易遇到的错误
2015/04/03 Python
用Python实现一个简单的能够发送带附件的邮件程序的教程
2015/04/08 Python
浅谈python中的getattr函数 hasattr函数
2016/06/14 Python
Python实现屏幕截图的代码及函数详解
2016/10/01 Python
pyspark操作MongoDB的方法步骤
2019/01/04 Python
使用Python实现企业微信的自动打卡功能
2019/04/30 Python
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
2020/05/14 HTML / CSS
Canal官网:巴西女性时尚品牌
2019/10/16 全球购物
国际经济贸易专业推荐信
2013/11/06 职场文书
销售行政专员职责
2014/01/03 职场文书
党的群众路线教育实践活动动员会主持词
2014/03/20 职场文书
巾帼文明岗申报材料
2014/05/01 职场文书
班级课外活动总结
2014/07/09 职场文书
《中国梦我的梦》小学生演讲稿
2014/08/20 职场文书
2014个人反腐倡廉思想汇报
2014/09/15 职场文书
2016党员党课心得体会
2016/01/07 职场文书
初中思品教学反思
2016/02/20 职场文书
Java Spring Boot请求方式与请求映射过程分析
2022/06/25 Java/Android