Python操作两个字典键值对 匹配输入输出值解决嵌套循环重复打印问题
错误原因
原代码有三个核心问题导致重复输出、逻辑不符合预期:
- 直接遍历字典对象未调用
.items()方法时,循环只会拿到字典的键,无法同时获取键和对应值,运行会直接抛出解包错误 - 两层嵌套循环会对两个字典的键做笛卡尔积匹配,3个键的场景下会执行9次循环,必然出现重复计算、重复打印的问题
- 缺少「字典键是否存在于输入文本」的判断逻辑,不满足需求要求
正确实现代码
score = {"hello": 5, "goodbye": 1, "how are you": 7} word_count = {"hello": 1, "goodbye": 1, "how are you": 3} text = input("Enter your text here: ") text_list = text.split(" ") text_len = len(text_list) for keyword in score: # 键不存在于输入文本则直接跳过 if keyword not in text: continue # 单轮循环直接取两个字典同键的值计算,无需嵌套 rating = score[keyword] cnt = word_count[keyword] denominator = cnt - text_len # 可选:增加分母为0的判断避免除零报错 if denominator == 0: print(f"关键词「{keyword}」计算时分母为0,无法输出结果") continue res = rating / denominator print(f"关键词「{keyword}」对应计算值:{res}")
实现说明
- 两个字典的键完全一一对应,不需要写嵌套循环匹配,单次遍历所有键即可,从根源上避免重复匹配问题
- 因为存在
how are you这类带空格的多词键,直接判断键是否在原始输入文本字符串中即可,不要判断是否在分词后的text_list中,否则多词键会匹配失败 - 如果想简化写法,遍历的时候可以直接同时取键和值,把循环头写成
for keyword, rating in score.items()即可,不需要单独通过键索引score里的值
内容的提问来源于stack exchange,提问作者user19224573
相关产品推荐
相关产品推荐

