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

一个字典

dic = {
 1: 'a', 
 2: 'a', 
 3: 'b', 
 4: 'a', 
 5: 'c', 
 6: 'd', 
 7: 'd', 
 8: 'a', 
 9: 'a'}

我想删除重复值只保留一个K / V对,
关于那些重复值的“关键”选择,它可以是最大值或最小值,或者通过随机选择那些重复项目的密钥之一.

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

以值“a”为例

 1: 'a', 
 2: 'a', 
 4: 'a', 
 8: 'a', 
 9: 'a'

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

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

谁能和我分享一个想法?

谢谢!

解决方法:

import itertools as it

newdic = {}
for v, grp in it.groupby(sorted((v, k) for k, v in dic.items)):
  newdic[min(k for _, k in grp)] = v

或者代替min的其他“选择”函数(当然,即使键是字符串也可以正常工作 – 在这种情况下会给你“词法第一”键).

选择函数需要注意的一种情况是当对应于相同值的键可能是不可比较的(例如,复数,或者在Python 3中,不同的非全数字类型的对象).什么没关键=在分钟不会治愈;-).

上一篇:java – 输入重复键时保持原始键/值的Hashmap


下一篇:Python删除组合字典列表中的重复值