- 部分数据如下:
李涵剑:经济191,430
赵康剑:会计191,541
冯剑健:经济191,549
赵一一:机械191,301
冯风琳:计算191,352
王林林:经济191,577
赵一舒:计算191,516
赵国健:会计191,553
钱健华:计算191,412
冯风林:会计191,584
赵蓝舒:英语191,361
王琳琳:机械191,516
钱舒健:英语191,445
钱康国:会计191,317
冯健琳:会计191,512
李华国:英语191,344
冯舒国:经济191,383
钱一华:会计191,315
冯林风:机械191,596
冯舒蓝:计算191,557
李林剑:计算191,576
钱健一:机械191,476
钱华康:英语191,580
钱琳林:会计191,562
李国剑:机械191,405
冯林康:英语191,591
钱健国:会计191,548
王一华:经济191,575
钱涵剑:机械191,469
冯涵林:计算191,390
钱涵蓝:经济191,582
王林舒:经济191,342
赵康林:英语191,427
王天剑:机械191,394
王风天:计算191,381
王国蓝:英语191,450
冯琳华:会计191,542
赵林风:会计191,475
冯剑健:英语191,355
王琳国:计算191,521
赵健林:会计191,374
赵琳蓝:会计191,559
冯国健:机械191,530
李国舒:经济191,502
钱剑华:会计191,330
王蓝健:经济191,456
赵天风:英语191,381
冯涵风:计算191,304
钱林涵:计算191,591
冯蓝剑:机械191,560
赵一健:英语191,350
李涵舒:会计191,399
冯天舒:会计191,451
钱康林:英语191,505
王林蓝:计算191,467
钱剑蓝:英语191,519
李风舒:经济191,494
钱华舒:机械191,548
钱健天:经济191,343
李蓝蓝:机械191,409
王剑华:机械191,559
王华华:英语191,358
王健涵:会计191,369
钱国剑:经济191,464
赵一天:会计191,375
李华天:机械191,620
冯天涵:机械191,414
钱天风:英语191,451
钱国天:会计191,441
赵剑林:英语191,306
钱舒林:经济191,511
赵剑林:计算191,422
钱一蓝:经济191,530
李舒健:计算191,352
- 核心思想都是构造一个字典,其中keys为班级,values为班级成绩组成的一个列表。
本人代码
f_data = open('data.txt', 'r', encoding="utf-8")
d_c = {}
for line in f_data:
line = line.strip().split(',')
value = line[-1]
key = line[0].split(":")[1]
if key not in d_c:
d_c[key] = [value]
else:
d_c[key].append(value)
for k,v in d_c.items():
num = 0
for i in range(len(v)):
num += eval(v[i])
print('{}:{:.2f}'.format(k,num/len(v)))
f_data.close()
- 注意以上代码8~10行代码实现的就是下面代码第7行的功能。
书上参考代码
f_data = open('data.txt', 'r', encoding="utf-8")
d = {}
students = f_data.readlines()
for student in students:
student = student.strip().split(':')
CLASS, score = student[1].split(',')
d[CLASS] = d.get(CLASS, []) + [eval(score)]
for key in d:
avg_score = sum(d[key]) / len(d[key])
print('{}:{:.2f}'.format(key, avg_score))
f_data.close()
总结:要注意字符串经过split函数切分后,形成的列表中的元素也是str类型。为了能对成绩求和,以上代码都使用了eval()函数。
另外,第二个代码中第7行代码运用很巧妙。一般使用d.get()是统计词频的,比如d[word]=d.get(word,0) + 1。而这里对这个函数进行了灵活的应用。
ls = '1,2,3'
lt = ls.split(",")
lt
['1', '2', '3']