我正在尝试获取字典中值最小的键,其中键位于单独的列表中。我也担心以我的方式初始化我的变量“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
结尾语法错误无效。
答案 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'
如果l
中d
中列出了 中的任何值,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
中不存在。