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

如何反转字典后移除所有非唯一键值对且不修改原字典?

解决字典反转并移除非唯一键值对的问题

你的代码逻辑存在缺陷:当某个值出现奇数次时,最后一次遍历会将其重新添加到反转字典中。比如输入里值1出现了3次,第一次遍历'one':1时添加1:'one',第二次遍历'uno':1时删除该键,第三次遍历'un':1时因为字典里已无1,又会添加1:'un',最终导致结果不符合预期。

方案一:先统计值的出现次数,再构建反转字典

先遍历原字典统计每个值的出现次数,只对出现次数为1的键值对进行反转,确保最终结果里只保留唯一值对应的键。

def invert(d):
    # 统计每个值的出现次数
    value_counts = {}
    for val in d.values():
        value_counts[val] = value_counts.get(val, 0) + 1
    
    # 构建符合要求的反转字典
    inverted_dict = {}
    for key, val in d.items():
        if value_counts[val] == 1:
            inverted_dict[val] = key
    return inverted_dict

测试验证:

>>> invert({'one':1, 'two':2, 'uno':1, 'dos':2, 'three':3, 'un':1})
{3: 'three'}

方案二:用collections.Counter简化统计

借助Python标准库的Counter工具可以更简洁地完成值的统计,再通过字典推导式快速生成结果:

from collections import Counter

def invert(d):
    val_counts = Counter(d.values())
    return {val: key for key, val in d.items() if val_counts[val] == 1}

两种方案都不会修改原字典,完全满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:30:54