如何查找键在列表中的最低值的字典键

时间:2013-05-10 08:49:03

标签: python

我正在尝试获取字典中值最小的键,其中键位于单独的列表中。我也担心以我的方式初始化我的变量“key”可能会在将来引起麻烦,即使我认为它不会。

d = { "a":3, "b":2, "c":7 }
l = ["a","b"]

key = l[0]
for c in l:
    key = c if d[c] < d[key] else key
print key

我仍在尝试处理列表理解。我尝试过这样的东西来替换for循环和所有东西,但它不起作用:

key = c if d[c] < d[key] else key for c in l

结尾语法错误无效。

1 个答案:

答案 0 :(得分:9)

使用key参数min() function选出最低的密钥:

min(l, key=d.__getitem__)

key参数必须是可调用的,它将输入列表中的项目映射到您要选择最小项目的值。在您的示例中,'b'是最低的项目,因为d将其映射到2,而'a'则映射到3

演示:

>>> d = { "a":3, "b":2, "c":7 }
>>> l = ["a","b"]
>>> min(l, key=d.__getitem__)
'b'

如果ld中列出了 中的任何值,d.__getitem__将会KeyError {<1}}:

>>> min(['a', 'b', 'e'], key=d.__getitem__)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'e'

你也可以使用lambda i: d[i]来获得相同的效果,而不会直接使用dunder(双下划线)特殊方法。

如果您想忽略不存在的密钥,请使用:

min(['a', 'b', 'e'], key=lambda i: d.get(i, float('inf'))

float('inf')保证始终大于任何其他数字,因此在上面的示例中,'e'不会被视为最小值,因为它d中不存在。

相关问题