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

如何检测字典中仅出现一次的值及其对应键

问题描述

给定两个字典:

d = {0:0,1:0,2:0,3:1,4:0,5:0}
D = {0:False,1:False,2:False,3:True,4:False,5:False}

需要找出字典里只出现过一次的值,并定位到它对应的键,最终要输出:

Value 1 occurs once at key 3
Value True occurs once at key 3

已经用collections.Counter统计出了值的出现次数:

from collections import Counter
print(Counter(d.values()))
# 输出:Counter({0: 5, 1: 1})
print(Counter(D.values()))
# 输出:Counter({False: 5, True: 1})

但不知道怎么根据这些结果找到对应的值的键。

解决方案

分两步就能搞定:

  1. 先用Counter筛选出出现次数为1的值
  2. 遍历原字典,匹配值找到对应的键

基础实现代码

from collections import Counter

def find_single_key(dict_obj):
    # 统计值的出现次数
    count = Counter(dict_obj.values())
    # 挑出只出现一次的值
    target_values = [v for v, cnt in count.items() if cnt == 1]
    # 遍历字典找对应键
    for val in target_values:
        for k, v in dict_obj.items():
            if v == val:
                print(f"Value {val} occurs once at key {k}")
                break  # 因为值只出现一次,找到就停

# 测试两个字典
d = {0:0,1:0,2:0,3:1,4:0,5:0}
D = {0:False,1:False,2:False,3:True,4:False,5:False}

find_single_key(d)
find_single_key(D)

运行结果

Value 1 occurs once at key 3
Value True occurs once at key 3

优化版本(适合大字典)

如果字典数据量很大,上面的方法要遍历两次字典,效率有点低。可以换个思路,遍历字典的时候直接记录每个值对应的所有键,之后再找只有一个键的值:

def find_single_key_fast(dict_obj):
    value_keys = {}
    for k, v in dict_obj.items():
        # 把键加到对应值的列表里
        value_keys.setdefault(v, []).append(k)
    # 筛选出只有一个键的项
    for val, keys in value_keys.items():
        if len(keys) == 1:
            print(f"Value {val} occurs once at key {keys[0]}")

# 测试效果一样
find_single_key_fast(d)
find_single_key_fast(D)

这个版本只需要遍历字典一次,处理大字典的时候速度会快很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 08:22:23