如何从Python字典列表中筛选出分数≥80的学生姓名?
问题解决:筛选分数≥80的学生姓名列表
问题描述
现有Python字典列表数据:
student_data = [ {"name":"Budi", "score": 90}, {"name":"Nina", "score": 78}, {"name":"Rudi", "score": 91}, {"name":"Olivia","score": 76}, {"name":"Leo", "score": 80}, {"name":"Liam", "score": 67}, {"name":"Sheila","score": 76} ]
需求:获取分数≥80的学生姓名并以列表形式输出,预期结果:['Budi', 'Rudi', 'Leo']
尝试以下代码出现报错:
for i in range(len(student_data)): if student_data[i].values()>=80: print(student_data[i].keys())
错误原因
- 类型不匹配:
student_data[i].values()返回的是字典所有值的视图对象(如dict_values(['Budi', 90])),无法直接与整数80做比较,会触发类型错误 - 取值错误:
student_data[i].keys()返回的是字典的键集合,不是学生姓名,应该通过student_data[i]['name']直接获取姓名 - 未收集结果:原代码仅逐个打印,无法生成预期的列表格式
正确实现
方法1:普通循环收集结果
student_data = [ {"name":"Budi", "score": 90}, {"name":"Nina", "score": 78}, {"name":"Rudi", "score": 91}, {"name":"Olivia","score": 76}, {"name":"Leo", "score": 80}, {"name":"Liam", "score": 67}, {"name":"Sheila","score": 76} ] result = [] for student in student_data: # 直接通过键名获取分数和姓名 if student["score"] >= 80: result.append(student["name"]) print(result)
方法2:列表推导式(更简洁)
student_data = [ {"name":"Budi", "score": 90}, {"name":"Nina", "score": 78}, {"name":"Rudi", "score": 91}, {"name":"Olivia","score": 76}, {"name":"Leo", "score": 80}, {"name":"Liam", "score": 67}, {"name":"Sheila","score": 76} ] # 一行代码完成筛选和收集 result = [student["name"] for student in student_data if student["score"] >= 80] print(result)
两种方法运行后都会输出预期结果:['Budi', 'Rudi', 'Leo']
内容的提问来源于stack exchange,提问作者Jovian Aditya
相关产品推荐
相关产品推荐

