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)
但是,我需要两个具有最小值的键,即a
和c
.
什么是最好的方法?
(最终我想随机选择其中一个,但我不认为这是相关的).
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)
在写下这段代码之后,我认为这个选项具有相当的理论意义...... :)
归档时间: |
|
查看次数: |
13276 次 |
最近记录: |