获取字典中对应于最小值的键
如果我有一个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关于最小密钥的原始问题的答案,而不是最小的答案。
您可以使用keys
function获得字典的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())]
打印“十四”