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
的键集中减去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)
打印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])< /代码>。好捕获!更新。