如何在Python字典中匹配指定短语并输出对应键?代码纠错
问题:根据指定短语匹配字典中对应的键
需求:在给定的dict_ep字典中,找到指定短语(如'FRAUDED BILL')对应的字典键(例如匹配该短语时输出EP1_2)。
原代码
dict_ep = {'EP1_2':['FRAUDED BILL','IMPROPER BILLING - FRAUDED CARD (CARDS)','EMBEZZLEMENT','FRAUD'], 'EP1_4':['2nd COPY OF CONTRACT (CONSIGNEE)','ACCIDENT WITH DISPOSED VEHICLE'], 'EP1_6':['BANK STRIKE'], 'EP1_8':['ACCESS TO BALANCE AND CARD LIMIT','PAYMENT AGREEMENT']} problem = ('frauded bill').upper() for i in dict_ep: if problem == dict_ep.keys(): print('EP found') else: print('EP no exist, try again!')
错误运行结果
EP no exist, try again! EP no exist, try again! EP no exist, try again! EP no exist, try again!
错误排查
- 判断逻辑完全错误:代码中用
problem == dict_ep.keys()将目标字符串和字典的键集合做相等比较,类型和内容均不匹配,永远不会成立。 - 未访问对应的值列表:循环遍历字典键时,没有取出键对应的短语列表,无法检查目标短语是否存在。
- 输出逻辑错误:每次循环都输出结果,而非找到匹配项时输出对应键、未找到时仅输出一次提示。
修正后的代码
精确匹配版本(完全匹配短语)
dict_ep = {'EP1_2':['FRAUDED BILL','IMPROPER BILLING - FRAUDED CARD (CARDS)','EMBEZZLEMENT','FRAUD'], 'EP1_4':['2nd COPY OF CONTRACT (CONSIGNEE)','ACCIDENT WITH DISPOSED VEHICLE'], 'EP1_6':['BANK STRIKE'], 'EP1_8':['ACCESS TO BALANCE AND CARD LIMIT','PAYMENT AGREEMENT']} problem = ('frauded bill').upper() found = False for ep_key, phrases in dict_ep.items(): if problem in phrases: print(f"匹配到的EP键:{ep_key}") found = True break # 找到第一个匹配项后停止循环,需所有匹配可删除此句 if not found: print('EP no exist, try again!')
模糊匹配版本(短语包含目标关键词)
如果需要支持模糊匹配(比如目标短语是'FRAUD'时匹配所有包含该词的项),可修改判断逻辑:
dict_ep = {'EP1_2':['FRAUDED BILL','IMPROPER BILLING - FRAUDED CARD (CARDS)','EMBEZZLEMENT','FRAUD'], 'EP1_4':['2nd COPY OF CONTRACT (CONSIGNEE)','ACCIDENT WITH DISPOSED VEHICLE'], 'EP1_6':['BANK STRIKE'], 'EP1_8':['ACCESS TO BALANCE AND CARD LIMIT','PAYMENT AGREEMENT']} problem = ('fraud').upper() found = False for ep_key, phrases in dict_ep.items(): for phrase in phrases: if problem in phrase: print(f"匹配到的EP键:{ep_key}") found = True break # 找到当前EP下的匹配后停止检查该EP的其他短语 if found: break # 找到第一个匹配的EP后停止循环,需所有匹配可删除此句 if not found: print('EP no exist, try again!')
内容的提问来源于stack exchange,提问作者William Soares
相关产品推荐
相关产品推荐

