获取字典中最小值对应的键
如果我有一个Python字典,怎么才能找到里面值最小的那一项的键呢?
我在想是不是可以用到 min()
这个函数...
假设输入是:
{320:1, 321:0, 322:3}
那么它会返回 321
。
17 个回答
56
如果有多个键的值都是最低的,你可以使用列表推导式来处理:
d = {320:1, 321:0, 322:3, 323:0}
minval = min(d.values())
res = [k for k, v in d.items() if v==minval]
[321, 323]
还有一种功能上等效的写法:
res = list(filter(lambda x: d[x]==minval, d))
80
这段代码会在比较值之后返回一个包含键和值的元组。
>>> d = {320:1, 321:0, 322:3}
>>> d.items()
dict_items([(320, 1), (321, 0), (322, 3)]) # Python 2.7 [(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)
如果你在用Python 2.7,建议使用 d.iteritems()
来处理较大的字典,因为这样可以避免复制数据。而在Python 3中,dict.items()
已经是一个 itemview
,所以不需要做任何更改。
949
最好的方法是使用 min(d, key=d.get)
-- 没必要在这里加一个没用的 lambda
层,或者去提取项目或键!
>>> d = {320: 1, 321: 0, 322: 3}
>>> min(d, key=d.get)
321