Advertisement

Python大学排名问题

阅读量:

某次考试遇到一大学排名问题,当时没做出来,现试解如下。

有如下数据文件,包括一组大学排名,包括名次,学校名,所属国别,现要求按特定格式输出

输出格式要求
国别:该国入选高校数量:入选高校列表

美国: 2:加州理工,哈佛
英国: 2:牛津,剑桥
中国: 1:清华

复制代码
    # 1,加州理工,美国
    # 2,哈佛,美国
    # 3,牛津,英国
    # 4,剑桥,英国
    # 5,清华,中国
    
    fi = open('data.txt', 'r', encoding='utf-8')
    
    d = {}
    
    for line in fi:
    ls = line.strip().split(',')
    d[ls[2]] = [0, []]//按要求构造字典,键为国名,值为一个嵌套的列表,第一个是入选高校数,第二个为入选高校列表
    //多次尝试,没找到all-in-one的方式能一次创建字典并填入所需数据,所以采取先构造初始化字典,然后再循环一次,更新字典
    
    fi.seek(0)
    
    for line in fi:
    ls = line.strip().split(',')
    d[ls[2]][0] = d.get(ls[2], 0)[0] + 1
    d[ls[2]][1].append(ls[1])
    
    for k in d:
    print('{:>4}:{:>4}:{}'.format(k, d[k][0], ','.join(d[k][1])))
    
    fi.close()

感觉还有更好的解法,如果你有更好的答案请告诉我。

第2版解法,感觉好了很多

复制代码
    fi = open('data.txt', 'r', encoding='utf-8')
    
    d = {}
    
    for line in fi:
    ls = line.strip().split(',')
    if ls[2] not in d:
        d[ls[2]] = [0, []]//构造字典
    d[ls[2]][0] = d.get(ls[2], 0)[0] + 1
    d[ls[2]][1].append(ls[1])
    
    for k in d:
    print('{:>4}:{:>4}:{}'.format(k, d[k][0], ','.join(d[k][1])))
    
    fi.close()

全部评论 (0)

还没有任何评论哟~