Python按指定特征移除字典键值对代码未生效问题排查
问题排查与修复
你的代码存在几个关键错误,导致删除逻辑完全失效:
1. 循环变量名与函数参数重名
函数参数定义了valeur_caracteristique(要匹配的特征值),但循环里又用了同名变量for name, valeur_caracteristique in personnages_copy.items(),这直接覆盖了传入的参数值——此时valeur_caracteristique变成了遍历到的人物字典,而非你传入的'femme'。后续判断条件valeur_caracteristique[type_caracteristique] == valeur_caracteristique相当于拿人物的特征值和人物字典本身比较,永远不可能相等,自然不会执行删除操作。
2. return语句缩进错误
当前代码的return personnages_restants在函数外部,属于全局代码块,函数执行完根本不会返回任何值(虽然这里函数直接修改原字典,但语法上属于错误)。
修复后的代码
personnages_restants = {'Bernard': {'genre': 'homme', 'accessoires': ['chapeau']}, 'Claire': {'genre': 'femme', 'accessoires': ['chapeau']}, 'Eric': {'genre': 'homme', 'accessoires': ['chapeau']}, 'George': {'genre': 'homme', 'accessoires': ['chapeau']}, 'Maria': {'genre': 'femme', 'accessoires': ['chapeau']}} def fn_1(personnages_restants, type_caracteristique, valeur_caracteristique): # 遍历拷贝后的字典,避免遍历原字典时修改导致的异常 for name, chara_info in personnages_restants.copy().items(): if chara_info[type_caracteristique] == valeur_caracteristique: del personnages_restants[name] return personnages_restants print(fn_1(personnages_restants, 'genre', 'femme'))
修复说明
- 把循环变量改为
chara_info,避免覆盖传入的特征值参数 - 将
return语句缩进至函数内部,保证函数正常返回结果 - 直接遍历原字典的拷贝,避免遍历过程中修改原字典引发的迭代异常
内容的提问来源于stack exchange,提问作者mrquaternion
相关产品推荐
相关产品推荐

