举例讲解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 相关文章推荐
利用Psyco提升Python运行速度
Dec 24 Python
Python可跨平台实现获取按键的方法
Mar 05 Python
python妹子图简单爬虫实例
Jul 07 Python
Python的Django框架中的数据过滤功能
Jul 17 Python
python中文件变化监控示例(watchdog)
Oct 16 Python
在python 中实现运行多条shell命令
Jan 07 Python
Django后端接收嵌套Json数据及解析详解
Jul 17 Python
Django models filter筛选条件详解
Mar 16 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
Nov 05 Python
python 模拟登陆github的示例
Dec 04 Python
OpenCV-Python实现怀旧滤镜与连环画滤镜
Jun 09 Python
python 使用tkinter与messagebox写界面和弹窗
Mar 20 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(PHPBB的代码)
2006/10/09 PHP
php实现用户在线时间统计详解
2011/10/08 PHP
php中各种定义变量的方法小结
2017/10/18 PHP
PHP iconv()函数字符编码转换的问题讲解
2019/03/22 PHP
javascript 在firebug调试时用console.log的方法
2012/05/10 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
2015/05/09 Javascript
真正好用的js验证上传文件大小的简单方法
2016/10/27 Javascript
Angular ui.bootstrap.pagination分页
2017/01/20 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
2017/04/26 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
2018/04/01 Javascript
Vue中的无限加载vue-infinite-loading的方法
2018/04/08 Javascript
结合Vue控制字符和字节的显示个数的示例
2018/05/17 Javascript
基于vue和react的spa进行按需加载的实现方法
2018/09/29 Javascript
vue-cli3+typescript初体验小结
2019/02/28 Javascript
详解使用React制作一个模态框
2019/03/14 Javascript
Vue注册组件命名时不能用大写的原因浅析
2019/04/25 Javascript
Vue运用transition实现过渡动画
2019/05/06 Javascript
小程序登录/注册页面设计的实现代码
2019/05/24 Javascript
JS实现的简单tab切换功能完整示例
2019/06/20 Javascript
详解Vue.js和layui日期控件冲突问题解决办法
2019/07/25 Javascript
python脚本内运行linux命令的方法
2015/07/02 Python
python中使用print输出中文的方法
2018/07/16 Python
Python使用微信接入图灵机器人过程解析
2019/11/04 Python
python装饰器原理与用法深入详解
2019/12/19 Python
在win64上使用bypy进行百度网盘文件上传功能
2020/01/02 Python
Pyecharts绘制全球流向图的示例代码
2020/01/08 Python
聊聊python中的循环遍历
2020/09/07 Python
英国最红的高街时尚品牌:Topshop
2016/08/05 全球购物
美国网上花店:JustFlowers
2017/02/12 全球购物
MATCHESFASHION.COM美国官网:英国奢侈品零售商
2018/10/29 全球购物
路德维希•贝克(LUDWIG BECK)中文官网:德国大型美妆百货
2020/09/19 全球购物
一些Unix笔试题和面试题
2012/09/25 面试题
篮球友谊赛通讯稿
2014/10/10 职场文书
2015年教师党员承诺书
2015/04/27 职场文书
红十字会救护培训简讯
2015/07/20 职场文书