首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取字典最小值的键,而字典的最小值则位于数组中。

获取字典最小值的键,而字典的最小值则位于数组中。
EN

Stack Overflow用户
提问于 2021-10-20 04:03:30
回答 2查看 734关注 0票数 3

我希望得到在给定字典中有最小值的键,但条件是该键位于给定的列表中。

例如,这将是字典。

代码语言:javascript
运行
复制
dict = {
    's': 0,
    'y': 5,
    't': 8,
    'z': 7,
    'x': 9
}

这是要检查的键的列表

代码语言:javascript
运行
复制
list = ['y', 'z', 't', 'x'] 

我做了这个实现,但我认为它可以优化或制作更多的节奏曲。

代码语言:javascript
运行
复制
a = float("inf")
for key in dict:
    if key in list:
        temp=a
        a = min(a,dict[key])
        if a < temp:
            minimum = key
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-20 04:06:02

mindct.get结合使用

代码语言:javascript
运行
复制
>>> min(lst, key=dct.get)
'y'
>>> 

这是lst中基于dct字典中该键的值的最小值。

我将dict重命名为dctlist重命名为lst,因此您不会覆盖变量名。

编辑:

正如@Ch3steR所提到的,如果字典中没有lst中的任何键。

你可以用:

代码语言:javascript
运行
复制
min(lst, key=lambda x: dct.get(x, float('inf')))

或者您可以使用@Ch3steR的方法,包括:

代码语言:javascript
运行
复制
min(dct.keys() & lst, key=dct.get)
'y'

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

代码语言:javascript
运行
复制
lst = ['y', 'z', 't', 'x', 'key that does not exist']

然后继承mydict类型:

代码语言:javascript
运行
复制
mydict = type('mydict', (dict,), {'__missing__': lambda self, key: float('inf'),})

现在您可以直接使用__getitem__

代码语言:javascript
运行
复制
>>> min(lst, key=mydict(dct).__getitem__)
'y'
>>> 

可以通过以下方式继承相同的mydict类型:

代码语言:javascript
运行
复制
class mydict(dict):
    def __missing__(self, key):
        return float('inf')

它也会起作用。

票数 6
EN

Stack Overflow用户

发布于 2021-10-20 16:10:20

下面是一种使用列表理解的方法

代码语言:javascript
运行
复制
dict = {
    's': 0,
    'y': 5,
    't': 8,
    'z': 7,
    'x': 9
}
list = ['y', 'z', 't', 'x'] 
temp =min([j for i,j in dict.items() if i in list])     ##output - 5
res = [i for i,j in dict.items() if dict[i]==temp]      
print(*res)

输出:

代码语言:javascript
运行
复制
y 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69640180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档