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

Python如何根据用户输入删除字典嵌套列表含指定名称的对应条目

错误原因梳理
  • 变量名冲突:用户输入的姓名存储在name变量中,循环时又将字典值赋值给name,直接覆盖了用户输入的内容。
  • 未定义变量id:两次尝试的代码都没有遍历字典的键,逻辑中用到的id是未声明变量,直接触发KeyError。
  • 遍历字典时直接删除元素会导致迭代异常:字典大小在遍历过程中发生变化,会导致后续迭代逻辑异常。
  • 循环提前返回:第一个版本的return语句写在循环体内,第一次循环执行完就直接返回,不会完成全量匹配。
  • 第二个版本的判断逻辑永远不成立:因为id未定义,所以判断条件不会触发,代码直接跳过。
正确实现

方案1:先收集待删除的键,再批量删除(修改原字典)

先把所有匹配姓名的键存到列表里,再遍历列表删除字典对应键,避免遍历原字典时修改结构。

target_name = input("Select a name you wish to delete: ")
# 先收集所有要删除的id
del_ids = []
for uid, info in id_dict4.items():
    if info[0] == target_name:
        del_ids.append(uid)
# 批量删除
for uid in del_ids:
    del id_dict4[uid]
# 输出结果
print(id_dict4)

方案2:字典推导式生成新字典(更简洁,推荐)

直接通过匹配逻辑生成新字典,不需要修改原字典,代码更安全简洁。

target_name = input("Select a name you wish to delete: ")
# 只保留姓名不匹配的条目,生成新字典
id_dict4 = {uid: info for uid, info in id_dict4.items() if info[0] != target_name}
print(id_dict4)

效果示例

原字典为{123: ['tom', 44.0], 321: ['kim', 22.0], 444: ['bob', 33.0], 777: ['bob', 66.0]},输入bob后输出结果为:
{123: ['tom', 44.0], 321: ['kim', 22.0]}

内容的提问来源于stack exchange,提问作者sppikart

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:24:01