一个简单的选择是首先确定最小值,然后选择映射到该最小值的所有键:
min_value = min(d.itervalues())
min_keys = [k for k in d if d[k] == min_value]
对于Python 3,使用d.values()而不是d.itervalues().
这需要通过字典的两个通行证,但应该是做这个的最快的选择之一.
使用reservoir sampling,您可以实现单次通过,随机选择一个项目:
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
写下这段代码后,我认为这个选项是有理由的兴趣… 🙂