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
相关产品推荐
相关产品推荐

