You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除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. 尝试1:遍历test_grades时,d是字典的键(学号),不是字典的value,内层循环遍历整数学号会直接报错;而且x初始为空字典,pop操作没有任何实际意义。
  2. 尝试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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 04:03:18