Python 如果未设置最小键,则返回与dict最小值关联的键

Python 如果未设置最小键,则返回与dict最小值关联的键,python,dictionary,set,Python,Dictionary,Set,我有一本字典和一套。我想返回与最小值关联的键(如果该键不在集合中),而不创建用于删除集合中已有项的第二个字典 我有一本字典 d = {1:10, 2:20, 3:30, 4:40} 还有一套 s = set([1,2]) 它应该返回3使用set操作从d的键集中减去sets,然后使用min和key=d。get以获得具有最小值的剩余键: d = {1:10, 2:20, 3:30, 4:40} s = set([1,2]) print min(set(d) - s, key=d.get) 打

我有一本字典和一套。我想返回与最小值关联的键(如果该键不在集合中),而不创建用于删除集合中已有项的第二个字典

我有一本字典

d = {1:10, 2:20, 3:30, 4:40}
还有一套

s = set([1,2])

它应该返回3

使用set操作从
d
的键集中减去set
s
,然后使用
min
key=d。get
以获得具有最小值的剩余键:

d = {1:10, 2:20, 3:30, 4:40}
s = set([1,2])

print min(set(d) - s, key=d.get)
打印
3

如果未找到键时结果必须为
None
,请使用:

q = set(d) - s
print min(q, key=d.get) if q else None

min

中的
ValueError
不同,您可以将
min
与生成器表达式一起使用,该表达式返回不在
s
中的键和从
d
中获取值的键参数:

>>> d = {1:10, 2:20, 3:30, 4:40}
>>> s = set([1,2])
>>> min((k for k in d if k not in s), key=d.get)
3
上述方法不会创建任何中间容器。如果有可能
s
匹配
d
中的键,则可以使用默认值:

>>> d = {1:10, 2:20, 3:30, 4:40}
>>> s = set([1,2,3,4])
>>> min((k for k in d if k not in s), key=d.get, default=-1)
-1

设置操作在这里很好地工作

d = {1:10, 2:20, 3:30, 4:40}
s = set([1,2])

def find_min(d, s):
    keys = set(d)
    difference = keys-s
    return min(difference) if difference else None

>>> print find_min(d, s)
3

或者,您可以使用
difference=filter(lambda e:e不在s,d中)

,因此制作一个字典,只包含不在集合中的key:value,并返回其中的最小值,问题是什么。我这样做了,我只是想知道是否有其他方法可以做到这一点,而不需要制作另一本字典。除了必须为不在s中的键构造/筛选外,这几乎是我看到的问题的重复,但添加的筛选是我寻求帮助的部分。注意
set(d)!=当
s-set(d)
为非空时,s
将失败。条件应为
set(d)-s
。考虑<代码>集合([ 0 ])<代码> >或代码>集合([1,2,3,4,5])< /代码>。好捕获!更新。