保留Python字典中不同值的最小键

时间:2017-11-08 15:19:59

标签: python dictionary

我有一个包含不同的整数键和可能重复的值的字典,如下所示:

Test

我知道如何使用my_data = {5:1,2:2,3:2,4:2,1:1} 获取不同的值,但我想要做的是选择带有密钥对的不同值,其中重复值中出现的小键,如下所示:

set()

2 个答案:

答案 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}