Python:获取字典中值最小但具有多个最小值的键

goz*_*lli 14 python dictionary multiple-instances minimum

我正在尝试执行与获取与字典中的最小值对应的键相同的操作 ,其中我们希望获得与字典中的最小值对应的键.

最好的方式似乎是:

min(d, key=d.get)
Run Code Online (Sandbox Code Playgroud)

但是我想在具有多个最小值的字典上应用它:

d = {'a' : 1, 'b' : 2, 'c' : 1}
Run Code Online (Sandbox Code Playgroud)

请注意,上面的答案是:

>>> min(d, key=d.get)
'a'
Run Code Online (Sandbox Code Playgroud)

但是,我需要两个具有最小值的键,即ac.

什么是最好的方法?

(最终我想随机选择其中一个,但我不认为这是相关的).

Sve*_*ach 13

一个简单的选择是首先确定最小值,然后选择映射到该最小值的所有键:

min_value = min(d.itervalues())
min_keys = [k for k in d if d[k] == min_value]
Run Code Online (Sandbox Code Playgroud)

对于Python 3使用d.values()而不是d.itervalues().

这需要两次通过字典,但无论如何应该是最快的选项之一.

使用油藏采样,您可以实施单通道方法,随机选择其中一个项目:

it = d.iteritems()
min_key, min_value = next(it)
num_mins = 1
for k, v in it:
    if v < min_value:
        num_mins = 1
        min_key, min_value = k, v
    elif v == min_value:
        num_mins += 1
        if random.randrange(num_mins) == 0:
            min_key = k
Run Code Online (Sandbox Code Playgroud)

在写下这段代码之后,我认为这个选项具有相当的理论意义...... :)