在 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 - 如何在 django 模板中为所有值并排显示两个键的字典值