我想使用lambda函数访问字典中的元组中的值
我需要通过比较该班学生的平均成绩来获得每个学科的平均GPA
我尝试使用lambda,但无法弄清楚。
const arr = [1,1,2,3,3,3,3,4,5,5,10];
var
counting = {},
most_Freq = arr[0]
;
arr.forEach( x=>{ counting[x] = (counting[x] || 0)+1; });
most_Freq = Object.keys(counting).reduce((a, b) => counting[a] > counting[b] ? a : b);
console.log ( 'most frequent is ', most_Freq )
输出必须为
grade = {'A': 4.0, 'B': 3.0, 'C': 2.0, 'D': 1.0, 'F' : 0.0}
subjects = {'math': {('Jack', 'A'),('Larry', 'C')}, 'English': {('Kevin', 'C'),('Tom','B')}}
def highestAverageOfSubjects(subjects):
return
,因为数学的平均GPA为3.0大于英语2.0的平均GPA
答案 0 :(得分:1)
通过将sorted
与key
函数一起使用,您可以轻松地对所有内容进行排序:
Grade = {'A': 4.0, 'B': 3.0, 'C': 2.0, 'D': 1.0, 'F' : 0.0}
subject = {'math': {('Jack', 'A'),('Larry', 'C')}, 'English': {('Kevin', 'C'),('Tom','B')}}
result = sorted(subject, key=lambda x: sum(Grade[g] for _, g in subject[x]) / len(subject[x]), reverse=True)
print(result)
输出:
['math','English']
如果作为中学,您想要按学生人数排序:
result = sorted(subject, key=lambda x: (sum(Grade[g] for _, g in subject[x]) / len(subject[x]), len(subject[x])), reverse=True)
print(result)
答案 1 :(得分:0)
实现方式的问题之一是您在set
字典中使用了subject
作为值。这意味着您必须覆盖每个元素。但是一旦有了元素,该值将像elem[1]
一样被索引。
例如:
Grade = {'A': 4.0, 'B': 3.0, 'C': 2.0, 'D': 1.0, 'F' : 0.0}
subject = {'math': {('Jack', 'A'),('Larry', 'C')}, 'English': {('Kevin', 'C'),('Tom','B')}}
for elem in subject['math']:
print(elem[1])
输出:
C
A
如果在上方的print
中,您print(elem)
会出现类似的内容:
('Larry', 'C')
('Jack', 'A')
因此,您可以轻松地扩展highAveSub(subject)
实现以获取所需的内容。
要查找某个主题的平均成绩:
def highAveSub(subname):
total = 0
for elem in subject[subname]: #Because your values are of type set, not dict.
total = total + grade[elem[1]] #This is how you will cross-reference the numerical value of the grade. You could also simply use enums and I'll leave that to you to find out
avg = total / len(subject[subname])
return avg