python dict按键的值删除重复值?

K. *_* C 3 python dictionary duplicates

一个字典

dic = {
 1: 'a', 
 2: 'a', 
 3: 'b', 
 4: 'a', 
 5: 'c', 
 6: 'd', 
 7: 'd', 
 8: 'a', 
 9: 'a'}
Run Code Online (Sandbox Code Playgroud)

我想删除重复值只保留一个K/V对,关于这些重复值的"关键"选择,可以是max或min,也可以通过随机选择其中一个重复项的键.

我不想使用ak/v交换,因为它无法控制密钥选择.

以值"a"为例

 1: 'a', 
 2: 'a', 
 4: 'a', 
 8: 'a', 
 9: 'a'
Run Code Online (Sandbox Code Playgroud)

最大键为{9:'a'},最小值为{1:'a'},随机将选择其中任何一个.

并且,如果键是其他类型的哈希值,例如字符串,那么如何做这样的选择呢?

谁能和我分享一个想法?

谢谢!

tom*_*m10 5

您可以构建一个反向字典,其中的值是初始字典中所有键的列表.使用它你可以做你想要的,最小,最大,随机,交替最小和最大,或其他什么.

from collections import defaultdict

d = defaultdict(list)
for k,v in dic.iteritems():
    d[v].append(k)

print d
# {'a': [1, 2, 4, 8, 9], 'c': [5], 'b': [3], 'd': [6, 7]}
Run Code Online (Sandbox Code Playgroud)