首页 > 开发 > Python > 正文

python dic value中的数字相加解决方案

2017-09-06 19:39:14  来源:网友分享

在写一些页面数据汇总的时候碰到了这样一个需求:生成了很多的字典
如:
dict1={'a':'3 host disabled','b':'0 Pending','c':'12 OK','d':''}
dict2={'b':'1 Pending','d':'4 service disabled','g':'hosts'}
dict3={'a':'1 host disabled','e':'2 DOWN','f':'services'}
...

类似这样的u3000每一个dict不一定所有的key都在u3000也有可能key在但value为空u3000但需要把所有dic的value进行相加汇总u3000输出dictu3000如:dict={'a':'4 host disabled','b':'1 pending','c':'12 OK','d':'4 service disabled','e':'2 DOWN'} 而且还会存在只有字母没有数字的情况u3000有数字的才进行相加
现在麻烦的就是u3000从value值中抽取数字进行相加u3000并且还要附加上后面的字符串u3000当然同一个keyu3000value涉及到的字符串是一样的。

PS:不改变原来的dictu3000都需要继续使用u3000新生成一个

有没有好的解决方案。

解决方案

其实 @yanyaoer 已经把问题解释的比较清楚了。只是 @Ajian 需要对数据做一个预处理。看在同事的份上,我帮你把 code 写出来吧~

#! /usr/bin/python# -*- coding: utf-8 -*-import stringdict1={'a':'3 host disabled','b':'0 Pending','c':'12 OK','d':''}dict2={'b':'1 Pending','d':'4 service disabled','g':'hosts'}dict3={'a':'1 host disabled','e':'2 DOWN','f':'services'}statusMap = {}dataList = []for dict in [dict1, dict2, dict3]:    data = {}    for k,v in dict:        if len(v) <=0:            continue        arr = v.split(" ", 1)        if (len(arr) <= 1):            statusMap[k] = arr[0]            continue        data[k] = arr[0]        statusMap[k] = arr[1]    dataList.append(data)data = merge(dataList)ret = {}for k,v in ret:    ret[k] = v + " " + statusMap[k]print ret