Python根据字典值查询对应key时函数返回None,应如何修改代码?
代码问题分析
- 问题1:
if aller in listofallergies是判断输入值是否为字典的键,而你的需求是匹配字典的值,因此输入得分永远无法触发if分支,直接走else返回None - 问题2:
listofallergies.keys(aller)语法错误,keys()方法不接收参数,且该方法是返回所有键的集合,无法实现根据值查键的功能 - 问题3:if分支内只有
print操作没有返回值,就算分支触发,函数最终返回值依然是None
修复方案
根据调用频次可以选择两种实现方式:
单次遍历实现(适合少量调用场景)
def allergie(aller): listofallergies = {'eggs': 1 , 'peanuts':2 ,'shellfish': 4 , 'strawberries':8 , 'tomatoes': 16 , 'chocolat':32 , 'pollen': 64 , 'cats': 128 } for key, value in listofallergies.items(): if value == aller: return key return None print(allergie(4)) # 输出shellfish
反向映射实现(适合高频调用场景,效率更高)
提前构建值到过敏原的映射字典,后续查询时间复杂度为O(1):
# 映射字典仅需构建一次 value_to_allergen = {1: 'eggs', 2: 'peanuts', 4: 'shellfish', 8: 'strawberries', 16: 'tomatoes', 32: 'chocolat', 64: 'pollen', 128: 'cats'} def allergie(aller): return value_to_allergen.get(aller) print(allergie(4)) # 输出shellfish
内容的提问来源于stack exchange,提问作者Dali Lemkecher
相关产品推荐
相关产品推荐

