高效查找字典中非零值的最大键方法

8 投票
5 回答
25741 浏览
提问于 2025-04-15 15:01

我刚开始学习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))
11

要找到最大的键,你可以使用 max 函数,然后像这样查看键:

max(x.iterkeys())

如果你想过滤掉值为0的情况,可以使用 生成器表达式

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

你可以把这些结合起来,得到你想要的结果(因为 max 只接受一个参数,所以生成器表达式的括号可以省略):

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

像这样的代码应该运行得比较快:

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

(去掉 != 0 这个部分会稍微快一点,但会让意思变得不太清楚。)

撰写回答