如何删除Python字典中passed值为True的学生条目?
问题:删除字典中"passed":True的学生条目
我有一个存储学生学号的字典,想要删除其中"passed":True的学生条目:
test_grades = { 9210114413 : {"grade": 55, "passed": True}, 9010054514 : {"grade": 22, "passed": False}, 8504129392 : {"grade": 60, "passed": True}, 9201134555 : {"grade": 15, "passed": False}, }
我尝试了多种for循环和if语句的写法都没成功,作为编程初学者,希望得到帮助。我还尝试了以下两段代码:
尝试1
x = {} for d in test_grades: for grade,point,p,tof in d: if tof == True: x.pop(tof) print(x)
尝试2
x = {} for d in test_grades: if test_grades[d]["passed"] == True: del x[d] print(x)
问题分析与解决方案
你的代码问题
- 尝试1:遍历
test_grades时,d是字典的键(学号),不是字典的value,内层循环遍历整数学号会直接报错;而且x初始为空字典,pop操作没有任何实际意义。 - 尝试2:
x一开始是空字典,你要删除的是原字典test_grades里的条目,但代码操作的是空字典,自然不会产生任何效果。
正确的实现方法
方法1:创建新字典(推荐,更安全)
直接筛选出passed为False的条目,生成新字典:
test_grades = { 9210114413 : {"grade": 55, "passed": True}, 9010054514 : {"grade": 22, "passed": False}, 8504129392 : {"grade": 60, "passed": True}, 9201134555 : {"grade": 15, "passed": False}, } # 用字典推导式筛选符合条件的条目 filtered_grades = {student_id: info for student_id, info in test_grades.items() if not info["passed"]} print(filtered_grades)
运行结果:
{9010054514: {'grade': 22, 'passed': False}, 9201134555: {'grade': 15, 'passed': False}}
方法2:遍历原字典的副本进行删除
如果一定要修改原字典,不能直接遍历原字典删除(会触发遍历异常),需要遍历原字典键的副本:
test_grades = { 9210114413 : {"grade": 55, "passed": True}, 9010054514 : {"grade": 22, "passed": False}, 8504129392 : {"grade": 60, "passed": True}, 9201134555 : {"grade": 15, "passed": False}, } # 遍历原字典键的列表副本 for student_id in list(test_grades.keys()): if test_grades[student_id]["passed"]: del test_grades[student_id] print(test_grades)
运行结果和方法1一致。
内容的提问来源于stack exchange,提问作者S12
相关产品推荐
相关产品推荐

