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()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值