我有一本字典和一套。我想返回与最小值关联的密钥,如果该密钥不在集合中,而不创建用于删除集合中已有项目的第二个字典。
示例:我有字典
d = {1:10, 2:20, 3:30, 4:40}
和一套
s = set([1,2])
它应该返回3
答案 0 :(得分:2)
使用设置操作从s
的密钥集中减去集合d
,然后使用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
而不是来自ValueError
的{{1}}。
答案 1 :(得分:1)
您可以使用min
生成表达式,返回不在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
答案 2 :(得分: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 not in s, d)