Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 计算特定dict键值的平均值Python 3.7.4_Python 3.x_Dictionary - Fatal编程技术网

Python 3.x 计算特定dict键值的平均值Python 3.7.4

Python 3.x 计算特定dict键值的平均值Python 3.7.4,python-3.x,dictionary,Python 3.x,Dictionary,我正在努力计算我的笔录成绩的总体平均值。科目等级和科目代码无关紧要。这些是我的笔录和清单 成绩={'INFO100':'C','INFO102':'B'\ ‘INFO125’:‘B’,‘INFO132’:‘A’\ “INFO180”:“INFO216”:“A”\ ‘INFO282’:‘C’,‘INFO284’:“”\ ‘ECON100’:‘C’,‘ECON110’:‘C’\ “ECON218”:“GEO100”:”\ 'GEO113':'D','GEO124':'D',} 主题=['INFO1

我正在努力计算我的笔录成绩的总体平均值。科目等级和科目代码无关紧要。这些是我的笔录和清单


成绩={'INFO100':'C','INFO102':'B'\
‘INFO125’:‘B’,‘INFO132’:‘A’\
“INFO180”:“INFO216”:“A”\
‘INFO282’:‘C’,‘INFO284’:“”\
‘ECON100’:‘C’,‘ECON110’:‘C’\
“ECON218”:“GEO100”:”\
'GEO113':'D','GEO124':'D',}
主题=['INFO100'、'INFO102'、'INFO125'\
‘INFO132’、‘INFO180’、‘INFO216’\
‘INFO282’、‘INFO284’、‘ECON100’\
‘ECON110’、‘ECON218’、‘GEO100’\
‘GEO113’、‘GEO124’]
主题代码={'informatic':'INFO'\
‘经济’:‘经济’\
“Geografi”:“GEO”}
这就是我所拥有的。不确定从这里开始在哪里以及如何迭代

convert_grade={A:5,B:4,C:3,D:2,E:1,F:0}
convert_grade.update({v:k代表k,convert_grade.items()中的v})
grade_sum=总和(['convert_grade['something']表示“某物”中的“某物”,如果“某物”不是无])
平均分数=四舍五入(分数总和/长度(['something'中的'something'表示'something',如果'something'不是无])
打印(“平均分数:”,转换分数[平均分数])
我得到了构造计算方法的帮助(我认为至少,这可能是一种太花哨的方法),但我真的不知道从那里迭代到哪里。我对python相当陌生,所以我仍在学习如何正确地迭代。任何帮助或指导都是非常受欢迎的。我不需要“我的”计算方法来工作,我只需要在正确的方向上得到帮助

grades = {'INFO100' : 'C','INFO102' : 'B', 
          'INFO125' : 'B','INFO132' : 'A', 
          'INFO180' : '' ,'INFO216' : 'A', 
          'INFO282' : 'C','INFO284' : '' , 
          'ECON100' : 'C','ECON110' : 'C', 
          'ECON218' : '' , 'GEO100' : '' , 
          'GEO113'  : 'D', 'GEO124' : 'D',}

total = 0
count = 0

for k, v in grades.items():
        if(v == "A"):
                total += 5
        elif(v == "B"):
                total += 4
        elif(v == "C"):
                total += 3
        elif(v == "D"):
                total += 2
        elif(v == "E"):
                total += 1
        else:
                total += 0

        count += 1

print(total / count)
收益率:
2.4285714285714284


这是这些分数的平均值(假设空格计数,如果您不想计数,我们可以将其过滤掉)

我不明白您为什么要用
convert\u grade.update
行将反向关系添加到dict。如果您需要它(至少在这个特定任务中不需要),您应该有两个字典。一个用于
字母等级->分数
映射,另一个用于
分数->字母等级
。您还应该将其从
convert_grade
重命名为
grade_to_score
或更具描述性的名称

首先,如果
表示您尚未参加该课程,且不应将其计入您的平均水平,则您必须首先将其过滤掉。您在正确的轨道上,但不检查是否有
None
检查空字符串,只需将该字符串视为布尔值即可,如果它是空字符串,则不会计算为true:

grades = {course: grade for course, grade in grades.items() if grade}
然后您需要使用字典将字母等级转换为数字列表,然后您可以使用
sum(x)/len(x)
或:

如果一个
'
意味着你得到了一个F,你可以跳过第一步,只需在你定义的
分数到分数中添加一个额外的
':0
部分


如果你想按课程获得平均数,只需在第一步之后过滤字典

info_grades = {course: grade for course, grade in grades.items() if course.startswith('INFO')}

然后,您可以将
info\u grades.values()
而不是
grades.values()
传递到
statistics.mean()
,以获得所有信息学课程的平均值。如果你想做每一件事,在
['INFO'、'ECON'、'GEO']
上循环一次

我正试图用关键值计算等级字典中我所有等级的平均值dict grades中关键值的总平均值就是我的意思。首先,不管科目代码是什么,也不管科目级别(100200300)是否有空字符串
'
表示F,或者你没有参加过该课程,它不应该是平均值的一部分?如果你有一个整数值等级字典,而不是一堆
elif
'slook,那就更好了!我也在研究同一个解决方案,但我只是不知道在哪里迭代键值。它计算空格的值是多少?0?没错,它将
''
计算为0。本质上,如果
A->E
没有映射,则计数为0。如果它对你有效,请随意接受:)@Boris我也会加上一个听写理解。等一下。@Boris你有例子吗?可以使用我的列表理解吗?当然,你必须仔细检查你不能有相同前缀的不同课程,比如如果你有
GE
GEO
类,那么使用那简单的
.startswith()
逻辑,所有
GEO
类都将计入
GE
类平均值。您应该为此添加一个检查,或者使用正则表达式提取第一组字母。
info_grades = {course: grade for course, grade in grades.items() if course.startswith('INFO')}