使用字典统计不同班级的成绩(d.get()函数的灵活应用)

在这里插入图片描述

  • 部分数据如下:
李涵剑:经济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']
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值