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

2024-04-27 23:21:35 发布

您现在位置: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方法来完成这项工作。


Tags: 方法列表字典方式dictcatuniquedog
3条回答

下面是一个只需要遍历一次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)

我认为如果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]

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

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

相关问题 更多 >