一个简单的选择是首先确定最小值,然后选择映射到该最小值的所有键:
min_value = min(d.itervalues())
min_keys = [k for k in d if d[k] == min_value]
对于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
写下这段代码后,我认为该选项具有相当的理论意义……:)