原始数据如下图,现需对每一种语言分类汇总各项指标,例如需计算3个项目中所有java语言增加的总行数(Addition列的52881、4828、14621的和)。每一个项目中语言的种类和数量是不可预知的,但针对一种语言进行的各项统计是确定的(这里共进行8项统计,其中前7项要按语言汇总,即做和,第8项RATE对某种语言是固定值,汇总时不要相加,照写即可)。
算法分为3步:
1、将取得的数据依次放入list中,形成一个一维list;
2、顺序遍历该list,获得语言项的下标位置,每种语言的名字是字典的key,下标列表是对应的value;
3、根据上面生成的字典依次对相同语言的对应条目进行做和,最后一项照写;
下面是代码实现,其中 tested 是原始数据在第一步后形成的一维list, index_dict 是第二步后形成的下标列表字典, summary 是最终的汇总数据列表。
tested = ['java','4','5','0.41','xml','3','7','0.23','java','23','42','0.41','xml','63','82','0.23']
index_dict = {}
for item in tested:
if item.isalpha():
if not index_dict.has_key(item): index_dict[item] = []
index_dict[item].append(tested.index(item))
tested[tested.index(item)]='-'
print(index_dict)
summary=[]
for item in index_dict:
summary.append(item)
index_list = [k+1 for k in index_dict[item]]
summary.append(sum(int(tested[k]) for k in index_list))
index_list = [k+2 for k in index_dict[item]]
summary.append(sum(int(tested[k]) for k in index_list))
summary.append(tested[index_dict[item][0]+3])
print(summary)
输出是(python 2.6):
{'xml': [4, 12], 'java': [0, 8]}
['xml', 66, 89, '0.23', 'java', 27, 47, '0.41']