我是新的Python并尝试以更加Pythonic和高效的方式实现代码。 给定带有数字键和值的字典,找到具有非零值的最大键的最佳方法是什么?
由于
答案 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”,通过内部堆栈索引跟踪它的最大非零值元素,其中顶部堆栈的元素始终是字典中最大元素的键。这样你就可以每次都获得恒定时间内最大的元素。