【发布时间】:2019-03-22 13:56:56
【问题描述】:
数据保存在一个列表中,其元素是字典,其中每个字典包含单个学生的数据:学生的 ID 号、科目的姓名以及他/她在每个科目中获得的分数两个部分考试,分别。每个字典的格式如下:
{'ID' : _IDnumber_, 'subject' : _'Artificial Intelligence'_, 'Partial Exam 1' : _points1_, 'Partial Exam 2' : _points2_}
现在我需要定义一个函数sum_partials(),它接收一个参数——包含学生数据的字典列表(如上所述),并返回相同的列表,但修改为每个字典将只包含部分考试的总分(即总分),而不是两次部分考试的分数。
例如。结果:
[{'ID': 12217, 'subject': 'Artificial Intelligence', 'Total score': 55}, {'ID': 13022, 'subject': 'Artificial Intelligence', 'Total score': 85}, {'ID': 13032, 'subject': 'Artificial Intelligence', 'Total score': 47}]
我已经通过使用一个函数来编辑每个学生,我将这个函数称为列表理解上的表达式:
def sum_partials(results):
# your code here
def update_student(student):
partial_exam1 = student['Partial Exam 1']
partial_exam2 = student['Partial Exam 2']
student.pop('Partial Exam 1')
student.pop('Partial Exam 2')
student['Total score'] = partial_exam1 + partial_exam2
return student
return [update_student(student) for student in results]
它运行完美,但我是 Python 新手,我想知道我是否可以重构我的代码!?是否有一种解决方案可以仅使用列表推导或嵌套列表推导在一行中执行此操作?
我的意思是,要在没有update_student() 函数的情况下完成我需要做的所有事情,而只能通过使用list comprehensions 来完成?
【问题讨论】:
-
如果您的代码符合预期并且您希望帮助改进/重构它,请查看code review。
-
您的返回值已经是一个列表理解。您的问题归结为,有没有办法将函数
update_student变成单行代码? 即使有,它也不太可能像您已经拥有的那样具有可读性书面。可以将student['Total score'] = partial_exam1 + partial_exam2结尾的5行简化为student['Total score'] = student.pop('Partial Exam 1') + student.pop('Partial Exam 2')。
标签: python list dictionary