我有一个包含不同的整数键和可能重复的值的字典,如下所示:
Test
我知道如何使用my_data = {5:1,2:2,3:2,4:2,1:1}
获取不同的值,但我想要做的是选择带有密钥对的不同值,其中重复值中出现的小键,如下所示:
set()
答案 0 :(得分:2)
首先,在第二个字典中具有相同值的组键。然后,使用字典理解来获取具有重复键的所有值的最小键。
>>> import collections
>>> my_data = {5:1,2:2,3:2,4:2,1:1}
>>> d = collections.defaultdict(list)
>>> for k, v in my_data.items():
... d[v].append(k)
>>> {min(keys): value for value, keys in d.items() if len(keys) > 1}
{1: 1, 2: 2}
(不确定if len(key) > 1
。如果这不是你在“重复值中”的意思,那么只需删除那部分。)
答案 1 :(得分:2)
按值排序 dict键值对然后按键(低位键优先),组按值排序,然后取每组中的第一个键,这将是该值的最低密钥。
您可以在没有中间字典的字典理解中执行此操作:
from itertools import groupby
dct = {5:1, 2:2, 3:2, 4:2, 1:1}
new_dict = dict(next(g) for _, g in groupby(sorted(dct.items(),
key=lambda x: x[::-1]), lambda x: x[1]))
# {1: 1, 2: 2}