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

467 投票
17 回答
462478 浏览
提问于 2025-04-16 01:31

如果我有一个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

撰写回答