python - 获取字典的最小值的键,该键又在数组中

标签 python python-3.x dictionary min

我想获取给定字典中具有最小值的键,但条件是该键在给定列表中

例如,这将是字典。

dict = {
    's': 0,
    'y': 5,
    't': 8,
    'z': 7,
    'x': 9
}

这是要检查的键列表

list = ['y', 'z', 't', 'x'] 

我做了这个实现,但我认为它可以优化或以更 pythonic 的方式制作。

a = float("inf")
for key in dict:
    if key in list:
        temp=a
        a = min(a,dict[key])
        if a < temp:
            minimum = key

最佳答案

mindct.get 一起使用:

>>> min(lst, key=dct.get)
'y'
>>> 

这是根据 dct 字典中那个键的值得到的 lst 中的最小值。

附言我将 dict 重命名为 dct 并将 list 重命名为 lst,因此您不会覆盖变量名称。

编辑:

正如@Ch3steR 提到的,如果有任何键不在字典中但在 lst 中。

你可以使用:

min(lst, key=lambda x: dct.get(x, float('inf')))

或者您可以使用@Ch3steR 的方法,其中:

min(dct.keys() & lst, key=dct.get)
'y'

但是我实现了自己的type,命名为mydict,你可以使用它,它继承了dict,只是它还有一个 >__missing__ 魔术方法定义,因此如果 key 不存在,它将给出 float('inf') (无穷大)。假设 lst 变成:

lst = ['y', 'z', 't', 'x', 'key that does not exist']

然后你继承mydict类型:

mydict = type('mydict', (dict,), {'__missing__': lambda self, key: float('inf'),})

现在你可以直接使用__getitem__了:

>>> min(lst, key=mydict(dct).__getitem__)
'y'
>>> 

相同的 mydict 类型可以继承:

class mydict(dict):
    def __missing__(self, key):
        return float('inf')

它也会起作用。

关于python - 获取字典的最小值的键,该键又在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69640180/

相关文章:

python - opencensus stats python stackdriver 导出器可以在 python 2 app engine 标准环境中使用吗?

python - 'NoneType' 对象在 Beautiful Soup 4 中不可调用

python - 使用列表递归迭代嵌套字典,并替换匹配的值

python - 如何将列表添加到字典?

python - 使用多个字典填充 Pandas 数据框

python - 使用 pandas 格式化不一致的日期数据

python - 如何创建菜单或目录?

python - 如何从图像中过滤特定的图像坐标

python-3.x - ImportError 与 from 。在简单的 python 文件上导入 x

python-3.x - 如何构建一个与 autograd 兼容的 Pytorch 模块,可以像图像一样调整张量的大小?