I am working with a list of dictionaries:
student_list = [{'id': 12341, 'first_name': 'Alice', 'last_name': 'Anderson',
'assignments': [('assignment_1', 0), ('assignment_2', 2), ('assignment_3', 4)]},
{'id': 12342, 'first_name': 'Boris', 'last_name': 'Bank',
'assignments': [('assignment_1', 1), ('assignment_2', 3), ('assignment_3', 0)]},
{'id': 12343, 'first_name': 'Carl', 'last_name': 'Cape',
'assignments': [('assignment_1', 2), ('assignment_2', 4), ('assignment_3', 1)]},
{'id': 12344, 'first_name': 'Didi', 'last_name': 'Dawson',
'assignments': [('assignment_1', 3), ('assignment_2', 0), ('assignment_3', 2)]},
{'id': 12345, 'first_name': 'Ed', 'last_name': 'Enders',
'assignments': [('assignment_1', 4), ('assignment_2', 1), ('assignment_3', 3)]}]
I need to write a function that searches for a dictionary by the students name, looks to see if there is matching assignment name and grade. If there is it returns True, if there isn't it returns False and adds it too the list. I am close with what I have, but regardless of if I type a true or false set if parameters it reads false and adds the assignment in as a tuple.
Can you help me find the missing piece of instruction needed in this function?
def add_grade(student, assignment_name, grade):
for s in student_list:
if s['first_name'] == student:
if any(s['assignments']) == (assignment_name, grade):
print(True)
else:
s['assignments'].append((assignment_name, grade))
print(False)
add_grade('Carl', 'assignment_2', 2)
print(student_list)
EDIT: The first answer helped me get the code working (Thanks!)
Now I've bulked it out and made it sloppier so that instead of an assignment being added twice with two different grades it puts an output that it exists already. What I have made is bulky and messy, and it seems like the fix should be easy but I can't figure it out. Thoughts?
def add_grade2(student, assignment_name, grade):
for s in student_list:
if s['first_name'] == student:
if (assignment_name, grade) in s['assignments']:
print(True)
elif (assignment_name, 0) in s['assignments']:
print('That assignment has a different grade. ')
break
elif (assignment_name, 1) in s['assignments']:
print('That assignment has a different grade. ')
break
elif (assignment_name, 2) in s['assignments']:
print('That assignment has a different grade. ')
break
elif (assignment_name, 3) in s['assignments']:
print('That assignment has a different grade. ')
break
elif (assignment_name, 4) in s['assignments']:
print('That assignment has a different grade. ')
break
else:
s['assignments'].append((assignment_name, grade))
print(False)
add_grade2('Alice', 'assignment_1', 3)
print(student_list)