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

Python字典反转函数异常:仅处理最后一个键值对问题排查

字典反转函数仅处理最后一组键值对的问题修复

问题根源

  1. 循环嵌套错误:外层遍历原字典的循环未包裹内层遍历值列表的循环,导致val最终仅保留原字典最后一个键对应的列表,后续仅处理该组数据。
  2. 缩进逻辑错误:else分支与外层for循环对齐,属于循环的收尾分支(循环正常结束时执行),而非if的分支,导致元素存在时的追加逻辑错误。
  3. 入口判断错误: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:27:31