DarkMatter in Cyberspace
  • Home
  • Categories
  • Tags
  • Archives

代码行汇总算法


原始数据如下图,现需对每一种语言分类汇总各项指标,例如需计算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']


Published

Jan 19, 2011

Last Updated

Jan 19, 2011

Category

Tech

Tags

  • 汇总 2
  • Python 136
  • 算法 3

Contact

  • Powered by Pelican. Theme: Elegant by Talha Mansoor