Вывести значение из вложенного словаря, если выполнено предыдущее условие - PullRequest
0 голосов
/ 15 октября 2019

Цель здесь - распечатать идентификаторы учеников для всех учеников, у которых средний балл заданий превышает 2,0. Прямо сейчас, когда я запускаю код, он просто печатает False для каждого учащегося, у которого в среднем более 2,0. Что мне не хватает? Я попытался изменить порядок безрезультатно. Кроме того, изменение формата словаря здесь не вариант.

РЕДАКТИРОВАТЬ - ОК первый бит был решен, и я обновил код. Теперь, как мне сделать мой окончательный вывод идентификаторов учеников в список? Я попытался определить идентификатор, а затем распечатать его в виде списка, но он просто возвращает несколько отдельных списков, а не все результаты в одном списке.

students = {"student_1": {"id":12,"Assignments":[("Assignment_1",3),("Assignment_2", 4), ("Assignment_3", 2)]},
            "student_2" :{"id":13,"Assignments":[("Assignment_1",2),("Assignment_2", 4), ("Assignment_3", 2)]},
            "student_3" :{"id":14,"Assignments":[("Assignment_1",0),("Assignment_2", 1), ("Assignment_3", 1)]}}

Петля:

for student in students.values():
        scores = [score for (assignment, score) in student["Assignments"]]
        identify = int(student["id"])
        if sum(scores)/len(scores) >=2.0:
            print([identify])

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Это очень хорошо! Проблема в вашей последней строке. Вы проверяете:

"id" in students.values())

Вот список student.values():

["student_1": {"id":12,"Assignments":[("Assignment_1",3),("Assignment_2", 4), ("Assignment_3", 2)]},
"student_2" :{"id":13,"Assignments":[("Assignment_1",2),("Assignment_2", 4), ("Assignment_3", 2)]},
"student_3" :{"id":14,"Assignments":[("Assignment_1",0),("Assignment_2", 1), ("Assignment_3", 1)]}]

Давайте на секунду оценим, что делает этот оператор. Для упрощения мы будем использовать:

a = 5
b = [1, 2, 3, 4, 5]
print(a in b)

Этот код также можно записать

for x in b:
    if a == x:
        print(True)
print(False)

Прямо сейчас вы проверяете, есть ли строка "id" в спискевложенные словари. Это не! Вместо этого вы хотите получить доступ к клавише "id" в своем словаре student:

student["id"]

В целом:

print(student["id"])

А затем полный код:

for student in students.values():
        scores = [score for (assignment, score) in student["Assignments"]]
        if sum(scores)/len(scores) >=2.0:
            print(student["id"])
0 голосов
/ 15 октября 2019

Эта строка кода print("id" in students.values()) печатает логическое значение, потому что вы проверяете, содержит ли students.values() идентификатор или нет. Возвращает логическое значение и, поскольку students.values не содержит 'id', выводит значение false. Вам нужно изменить эту строку кода на print(student['id']), чтобы вывести «id».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...