2

我试图在字典中获取具有最低值的键,其中键位于单独的列表中。我还担心以我现在的方式初始化我的变量“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

以无效的语法错误结束。

4

1 回答 1

9

使用函数key的参数来挑选最低调:min()

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'

如果其中有任何l在中列出的值,将引发:dd.__getitem__KeyError

>>> 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.

于 2013-05-10T08:50:28.027 回答