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

获取值唯一的字典项的最优实现方法

筛选字典中值唯一(或仅保留每个值首次出现项)的最优实现方法

给定字典:

dic = {'a': 100, 'b': 100, 'c': 90}

需求是得到仅包含每个值首次出现的键值对(唯一值全部保留)的字典,期望结果:

dic_b = {'a': 100, 'c': 90}

最优实现方法

推荐使用统计值频次+遍历去重的方式,兼顾效率与可读性,Python 3.7+下能完美保留原字典的插入顺序:

from collections import Counter

dic = {'a': 100, 'b': 100, 'c': 90}
# 统计每个值的出现次数
value_counts = Counter(dic.values())
# 记录已经添加过的值
seen = set()
result = {}

for key, val in dic.items():
    if val not in seen:
        result[key] = val
        seen.add(val)

print(result)  # 输出: {'a': 100, 'c': 90}

方法说明

  1. 时间复杂度为O(n)(n是字典键值对数量),Counter统计和遍历字典都是线性操作,效率极高;
  2. 通过seen集合记录已添加的值,确保每个值只保留首次出现的键值对,完全符合示例需求;
  3. 代码逻辑清晰,易维护,适合大多数场景。

如果追求极简代码且不在意保留首次出现的顺序(或可接受保留最后一次出现的键),也可以用字典推导式反转字典的方式,但这种方式无法直接保留首次出现的键,需要额外处理反向遍历:

dic = {'a': 100, 'b': 100, 'c': 90}
# 反向遍历原字典,让首次出现的键覆盖后续重复值的键
reverse_map = {val: key for key, val in reversed(dic.items())}
# 再反转回原结构
result = {key: val for val, key in reverse_map.items()}
print(result)  # 输出: {'a': 100, 'c': 90}

不过这种方式可读性稍差,不如第一种方法直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:46:37