向 lambda 函数添加额外的逻辑以从 python 字典中获取最小值
Adding additional logic to a lambda function to get the minimum value from a python dictionary
我有一个字典,其中的值将一些对象映射到一个整数;例如{节点:1,节点:2}。
我想获取对应于该字典中最小值的键,我知道我可以这样做:
min_key = min(my_dict, key=lambda k: my_dict[k])
但是,我还想添加一个约束,即密钥不包含在其他一些集合中。这是我希望工作的伪代码:
min_key = min(my_dict, key=lambda k: my_dict[k] where k not in my_set)
有没有一种方法可以将其作为 lambda 的一部分在 python 中作为单行代码编写,或者我现在是否必须显式循环遍历字典并像这样在循环中添加逻辑?
min_key, min_value = None, float('inf')
for k,v in my_dict.items():
if v < min_value and k not in my_set:
min_key = k
return min_key
将 my_dict
替换为 returns 已过滤字典的字典理解。
min_key = min({k:v for k, v in my_dict.items() if k not in my_set},
key = lambda k: my_dict[k])
它类似于@Barmar 的答案,但您也可以在 my_dict
和 my_set
之间使用 set.difference
来过滤相关字典:
out = min(set(my_dict).difference(my_set), key = lambda k: my_dict[k])
只取过滤后键的最小值而不是所有键:
min_key = min(my_dict.keys() - my_set, key=my_dict.get)
(注意我也替换了你的key
函数,不需要你自己写。)
我有一个字典,其中的值将一些对象映射到一个整数;例如{节点:1,节点:2}。
我想获取对应于该字典中最小值的键,我知道我可以这样做:
min_key = min(my_dict, key=lambda k: my_dict[k])
但是,我还想添加一个约束,即密钥不包含在其他一些集合中。这是我希望工作的伪代码:
min_key = min(my_dict, key=lambda k: my_dict[k] where k not in my_set)
有没有一种方法可以将其作为 lambda 的一部分在 python 中作为单行代码编写,或者我现在是否必须显式循环遍历字典并像这样在循环中添加逻辑?
min_key, min_value = None, float('inf')
for k,v in my_dict.items():
if v < min_value and k not in my_set:
min_key = k
return min_key
将 my_dict
替换为 returns 已过滤字典的字典理解。
min_key = min({k:v for k, v in my_dict.items() if k not in my_set},
key = lambda k: my_dict[k])
它类似于@Barmar 的答案,但您也可以在 my_dict
和 my_set
之间使用 set.difference
来过滤相关字典:
out = min(set(my_dict).difference(my_set), key = lambda k: my_dict[k])
只取过滤后键的最小值而不是所有键:
min_key = min(my_dict.keys() - my_set, key=my_dict.get)
(注意我也替换了你的key
函数,不需要你自己写。)