在 Python 中为字典实现 argmin [重复]

Posted

技术标签:

【中文标题】在 Python 中为字典实现 argmin [重复]【英文标题】:Implementing argmin in Python for dictionaries [duplicate] 【发布时间】:2015-07-17 11:27:45 【问题描述】:

这可能以前被问过,但是有人知道在 Python 中实现 argmin 的优雅方法吗?也就是说,给定一个字典 D 将整数映射到整数,我想找到键 k 使得 D[k] 最小化。

例如:

d = 1: 100, 2:200
argmin(d) = 1

【问题讨论】:

【参考方案1】:
def argmin(d):
    if not d: return None
    min_val = min(d.values())
    return [k for k in d if d[k] == min_val][0]

d = 1: 50, 2:100, 3:11
min_index = argmin(d)

编辑

min 有一个可选的 key 参数,因此您可以使用它来代替:

min_index = min(d, key=d.get)

【讨论】:

这是错误的,而且效率极低。它需要二次方时间,它使用max 而不是min,它使用is,它应该使用== 我并不是说它不能改进。但是它怎么会使用二次时间呢?在我看来它是线性的。 @user3267581:原始版本为每个键计算min(z.values()) 是的,我在 ipython 中做了一个%timeit,如果你在列表理解中使用min(z.values()),它的速度会大大降低。

以上是关于在 Python 中为字典实现 argmin [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在python中为空字典分配了多少空间? [复制]

如何在python中为2个列表和其他字典创建字典?

Python - 如何在 django 模板中为所有值并排显示两个键的字典值

在二维数组中查找 n 个 argmins

python 回传列表里头值最小的指数= np.argmin

Python之集合函数