有没有一种方法可以计算与键对应的字典值中的项目数?

时间:2019-07-07 12:10:08

标签: python python-3.x list-comprehension

我想提出一个解决方案,使我的代码找到对应于字典中某个键的值的平均值。

这是我的代码:

if __name__ == '__main__':
    n = int(input())
    student_marks = {}
    for _ in range(n):
        name, *line = input().split()
        scores = list(map(float, line))
        student_marks[name] = scores
    query_name = input()    
    li=[sum(value)/len(student_marks.keys()) for key,value in student_marks.items() if key==query_name] # PROBLEM HERE
    print(format(li[0],'.2f'),end='')

在这里解决我的难题的唯一关键是找出一种方法来获取字典的值部分中的项目计数。不幸的是,len(student_marks)len(student_marks.keys())不会使我的船开航。

我正在尝试使用列表理解来做到这一点,尽管可以轻松地在多行代码中完成,但是我正在努力提高列表理解的能力。任何使用列表理解方法的答案都可以解决这个问题不胜感激。谢谢:)

1 个答案:

答案 0 :(得分:3)

您的理解力是将sum除以整个字典中的键数(student_marks.keys()),但是对于计算单个键值的平均值而言,键数无关紧要。使用理解的有效解决方案是

print([sum(marks) / len(marks) for name, marks in student_marks.items()
       if name == query_name][0])

但是

您既不需要for也不需要理解。使用字典的全部目的是您可以直接访问各个键。

n = int(input())
student_marks = {}
for _ in range(n):
    name, *line = input().split()
    scores = list(map(float, line))
    student_marks[name] = scores
query_name = input()

# the only line you need is this:
print(sum(student_marks[query_name]) / len(student_marks[query_name]))

然后

>> 1
>> a 1 2 3
>> a
2.0

标准的lib替代:

from statistics import mean

...

print(mean(student_marks[query_name]))

>> 1
>> a 1 2 3
>> a
2.0