Python:如何在字典中查找值唯一的键?

18 投票
9 回答
18258 浏览
提问于 2025-04-15 12:26

我收到一个字典作为输入,想要返回一个列表,这个列表里的键对应的字典值在这个字典中是唯一的。

我用一个例子来说明。假设我的输入是字典 a,构造方式如下:

a = dict()
a['cat'] =      1
a['fish'] =     1
a['dog'] =      2  # <-- unique
a['bat'] =      3
a['aardvark'] = 3
a['snake'] =    4  # <-- unique
a['wallaby'] =  5
a['badger'] =   5  

我期望的结果是 ['dog', 'snake']

虽然有一些明显的方法可以实现这个目标,但我在想是否有更简洁的 Python 方法来完成这个任务。

9 个回答

5

这里有一个解决方案,只需要遍历字典一次:

def unique_values(d):
    seen = {} # dict (value, key)
    result = set() # keys with unique values
    for k,v in d.iteritems():
        if v in seen:
            result.discard(seen[v])
        else:
            seen[v] = k
            result.add(k)
    return list(result)
6

请注意,这实际上是一个暴力破解的方法:

l = a.values()
b = [x for x in a if l.count(a[x]) == 1]
15

我觉得如果字典太大,效率高的方法是

countMap = {}
for v in a.itervalues():
    countMap[v] = countMap.get(v,0) + 1
uni = [ k for k, v in a.iteritems() if countMap[v] == 1]

撰写回答