找到非零值字典中最大键的有效方法

时间:2009-10-12 17:48:22

标签: python dictionary

我是新的Python并尝试以更加Pythonic和高效的方式实现代码。 给定带有数字键和值的字典,找到具有非零值的最大键的最佳方法是什么?

由于

4 个答案:

答案 0 :(得分:13)

这样的事情应该相当快:

>>> x = {0: 5, 1: 7, 2: 0}
>>> max(k for k, v in x.iteritems() if v != 0)
1

(删除!= 0的速度会稍快一点,但在某种程度上会模糊一些含义。)

答案 1 :(得分:10)

要获得最大的密钥,您可以使用max功能并检查这样的密钥:

max(x.iterkeys())

要过滤掉值为0的那些,您可以使用generator expression

(k for k, v in x.iteritems() if v != 0)

您可以将这些组合起来以获得您要查找的内容(因为max只接受一个参数,因此可以删除生成器表达式周围的括号):

max(k for k, v in x.iteritems() if v != 0)

答案 2 :(得分:1)

Python的max函数为“measure”函数提供key=参数。

data = {1: 25, 0: 75}
def keymeasure(key):
    return data[key] and key

print max(data, key=keymeasure)

使用内联lambda来实现相同的效果和相同的局部变量绑定:

print max(data, key=(lambda k: data[k] and k))

最后替代将本地var绑定到匿名密钥函数

print max(data, key=(lambda k, mapping=data: mapping[k] and k))

答案 3 :(得分:0)

如果我是你,而速度是一个大问题,我可能会创建一个新的容器类“DictMax”,通过内部堆栈索引跟踪它的最大非零值元素,其中顶部堆栈的元素始终是字典中最大元素的键。这样你就可以每次都获得恒定时间内最大的元素。