某次考试遇到一大学排名问题,当时没做出来,现试解如下。
有如下数据文件,包括一组大学排名,包括名次,学校名,所属国别,现要求按特定格式输出
输出格式要求
国别:该国入选高校数量:入选高校列表
如
美国: 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()