Python:如何在字典中查找值唯一的键?
我收到一个字典作为输入,想要返回一个列表,这个列表里的键对应的字典值在这个字典中是唯一的。
我用一个例子来说明。假设我的输入是字典 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]