【发布时间】:2018-10-08 11:14:30
【问题描述】:
我正在处理字典列表:
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)]}]
我需要编写一个函数,通过学生姓名搜索字典,查看是否有匹配的作业名称和成绩。如果有则返回 True,如果没有则返回 False 并将其添加到列表中。我与我所拥有的很接近,但无论我输入一个 true 还是 false 集,如果参数它读取为 false 并将分配添加为元组。
您能帮我找到此功能所需的缺失指令吗?
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)
编辑: 第一个答案帮助我使代码正常工作(谢谢!)
现在我已将其扩大并使其更加草率,以便将一个作业添加两次并使用两个不同的等级,它会输出它已经存在的输出。我所做的既笨重又凌乱,看起来修复应该很容易,但我想不通。想法?
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)
【问题讨论】:
标签: python