获取字典中对应于最小值的键

如果我有一个Python字典,我如何获得包含最小值的条目的密钥?

我正在考虑与min()函数有关…

鉴于input:

 {320:1, 321:0, 322:3} 

它会返回321

最好: min(d, key=d.get) – 没有理由插入一个无用的lambda间接层或提取项目或键!

这是一个答案,实际上给了OP要求的解决scheme:

 >>> d = {320:1, 321:0, 322:3} >>> d.items() [(320, 1), (321, 0), (322, 3)] >>> # find the minimum by comparing the second element of each tuple >>> min(d.items(), key=lambda x: x[1]) (321, 0) 

然而,使用d.iteritems()对于较大的字典会更有效率。

min(d.items(), key=lambda x: x[1])[0]

编辑:这是OP关于最小密钥的原始问题的答案,而不是最小的答案。


您可以使用keysfunction获得字典的keys ,而您正确地使用min来查找该列表的最小值。

对于你有多个最小密钥并希望保持简单的情况

 def minimums(some_dict): positions = [] # output variable min_value = float("inf") for k, v in some_dict.items(): if v == min_value: positions.append(k) if v < min_value: min_value = v positions = [] # output variable positions.append(k) return positions minimums({'a':1, 'b':2, 'c':-1, 'd':0, 'e':-1}) ['e', 'c'] 
 >>> d = {320:1, 321:0, 322:3} >>> min(d, key=lambda k: d[k]) 321 

如果你不确定你有没有多个最小值,我会build议:

 d = {320:1, 321:0, 322:3, 323:0} print ', '.join(str(key) for min_value in (min(d.values()),) for key in d if d[key]==min_value) """Output: 321, 323 """ 

解决具有相同最小值的多个密钥问题的另一种方法是:

 >>> dd = {320:1, 321:0, 322:3, 323:0} >>> >>> from itertools import groupby >>> from operator import itemgetter >>> >>> print [v for k,v in groupby(sorted((v,k) for k,v in dd.iteritems()), key=itemgetter(0)).next()[1]] [321, 323] 

使用min与迭代器(python 3使用items而不是iteritems ); 而不是lambda使用来自运算符的itemgetter ,这比lambda快。

 from operator import itemgetter min_key, _ = min(d.iteritems(), key=itemgetter(1)) 
 d={} d[320]=1 d[321]=0 d[322]=3 value = min(d.values()) for k in d.keys(): if d[k] == value: print k,d[k] 
 # python d={320:1, 321:0, 322:3} reduce(lambda x,y: x if d[x]<=d[y] else y, d.iterkeys()) 321 

这是你想要的?

 d = dict() d[15.0]='fifteen' d[14.0]='fourteen' d[14.5]='fourteenandhalf' print d[min(d.keys())] 

打印“十四”