Есть ли способ подсчитать количество элементов в значениях словаря, соответствующего ключу? - PullRequest
0 голосов
/ 07 июля 2019

Я хотел бы предложить исправление, которое заставляет мой код находить среднее значение, соответствующее ключу в словаре.

Вот мой код:

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 Ответ

3 голосов
/ 07 июля 2019

Ваше понимание делит 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
...