Python字典反转函数异常:仅处理最后一个键值对问题排查
字典反转函数仅处理最后一组键值对的问题修复
问题根源
- 循环嵌套错误:外层遍历原字典的循环未包裹内层遍历值列表的循环,导致
val最终仅保留原字典最后一个键对应的列表,后续仅处理该组数据。 - 缩进逻辑错误:
else分支与外层for循环对齐,属于循环的收尾分支(循环正常结束时执行),而非if的分支,导致元素存在时的追加逻辑错误。 - 入口判断错误:
if __name__ == "main"应为if __name__ == "__main__"(缺少双下划线),否则主函数无法正常触发。
修正后的完整代码
def invert_dict(d): inverse = dict() # 遍历原字典的每个键值对 for key in d: val = d[key] # 嵌套遍历当前键对应的列表元素 for element in val: if element not in inverse: inverse[element] = [key] else: inverse[element].append(key) return inverse def main(): dict_1 = { "Protein_source_1": ['G.nuts', 'Eggs', 'Soya beans', 'Milk'], "Carbohydate_Source_2": ['Rice', 'Coco-yams', 'Yams'], "Vitamin_Source_3": ['potatoes', 'Vegetables', 'citrus furit'], "Fats_and_Oil_Source_4": ['Butter', 'Coconut oil', 'fatty meats'] } print("\nOriginal Dictionary : ") for k_1, v_1 in dict_1.items(): print('Key:', k_1, 'Value:', v_1) i = invert_dict(dict_1) print("\nThis is the Inverted Dictionary : ") for k_1, v_1 in i.items(): print('Key:', k_1, 'Value:', v_1) if __name__ == "__main__": main()
修正说明
- 将遍历值元素的
for循环嵌套到遍历原字典的循环内部,确保每个键对应的列表都被逐一处理。 - 调整
if-else的缩进,使其成为判断元素是否存在的分支逻辑,正确实现“不存在则创建列表,存在则追加原键”的需求。 - 修正主函数入口的判断条件,保证脚本可以直接运行。
内容的提问来源于stack exchange,提问作者Skibo
相关产品推荐
相关产品推荐

