Python:在字典中查找具有唯一值的键?

Roe*_*ler 16 python dictionary

我收到一个字典作为输入,并希望返回字典值在该字典范围内唯一的键列表.

我将以一个例子来澄清.说我的输入是字典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  
Run Code Online (Sandbox Code Playgroud)

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

有明显的蛮力方法来实现这一点,但我想知道是否有一种巧妙的Python方式来完成工作.

Anu*_*yal 14

我认为如果dict太大会有效的方式

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]
Run Code Online (Sandbox Code Playgroud)


Bar*_*ski 5

请注意,这实际上是一个暴力:

l = a.values()
b = [x for x in a if l.count(a[x]) == 1]
Run Code Online (Sandbox Code Playgroud)


Ric*_*and 5

这是一个只需要遍历一次dict的解决方案:

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)
Run Code Online (Sandbox Code Playgroud)