高效查找字典中非零值的最大键方法
我刚开始学习Python,想用更符合Python风格和更高效的方式来写代码。假设有一个字典,里面的键和值都是数字,怎么才能找到一个值不为零的最大键呢?
谢谢!
5 个回答
1
Python的max函数有一个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))
最后一种选择是将本地变量绑定到这个匿名的key函数中。
print max(data, key=(lambda k, mapping=data: mapping[k] and k))
15
像这样的代码应该运行得比较快:
>>> x = {0: 5, 1: 7, 2: 0}
>>> max(k for k, v in x.iteritems() if v != 0)
1
(去掉 != 0
这个部分会稍微快一点,但会让意思变得不太清楚。)