Python如何获取属于指定列表、且对应字典值最小的键
最优Python风格实现
首先注意不要用dict、list作为变量名,二者是Python内置类型,直接用作变量名会覆盖原有定义,引发后续不可预期的错误,我们先把示例变量重命名后给出实现:
# 示例字典 sample_dict = { 's': 0, 'y': 5, 't': 8, 'z': 7, 'x': 9 } # 目标键列表 target_keys = ['y', 'z', 't', 'x'] # 一行实现需求 min_valid_key = min((k for k in target_keys if k in sample_dict), key=sample_dict.get)
运行后min_valid_key的值为y,完全符合需求。
代码说明
- 生成器表达式
(k for k in target_keys if k in sample_dict)会先过滤出同时存在于目标列表和字典中的键,既避免无效键参与计算,也能防止目标列表中的键不存在于字典中触发报错 - 内置函数
min()的key参数传入sample_dict.get,表示按照每个键对应字典中的值来比较大小,最终返回值最小的对应键
如果需要处理「目标列表中所有键都不在字典里」的边界场景,可以给min()加default参数避免抛出异常:
min_valid_key = min( (k for k in target_keys if k in sample_dict), key=sample_dict.get, default=None # 无符合条件的键时返回None,可自定义默认值 )
原有实现的优化点
你原来的代码逻辑正确,还可以做几点优化:
- 如果目标列表体量较大,判断
key in list的时间复杂度是O(n),可以提前把列表转成集合target_set = set(target_keys),成员判断的时间复杂度会降到O(1),性能更好 - 不需要额外定义
temp变量做中间比较,逻辑可以更精简 - 没有兼容无符合条件键的场景,极端情况下会出现
minimum变量未定义的报错
内容的提问来源于stack exchange,提问作者Factral
相关产品推荐
相关产品推荐

