如何反向使用英雄皮肤字典?实现输入皮肤查询对应英雄
实现皮肤到英雄的反向查询功能
首先修正你原代码里的一个小问题:当前的champ_skin_dict把皮肤列表额外嵌套了一层(比如'ekko': [ekko_skins]),这会导致取值时返回嵌套列表,应该直接将皮肤列表赋值给英雄键,即'ekko': ekko_skins。
要实现皮肤到英雄的反向查询,核心是构建一个以统一小写的皮肤名为键、对应英雄列表为值的反向字典,这样就能快速通过皮肤名称定位所有拥有该皮肤的英雄,同时支持大小写不敏感的查询。
以下是完整实现代码:
# 英雄皮肤列表(修正了原拼写错误:Start Gardian → Star Guardian) ekko_skins = ['Firelight', 'Pulsefire', 'True Damage', 'Sandstorm', 'Academy', 'Project: Ekko', 'Star Guardian'] kat_skins = ['Mercenary', 'Battle Academia', 'Blood Moon', 'Battle Queen', 'High Noon', 'Red Card', 'Bilgewater', 'Kitty Cat', 'Slay Belle', 'Death Sworn'] # 修正后的英雄-皮肤映射字典 champ_skin_dict = {'ekko': ekko_skins, 'katarina': kat_skins} # 构建反向字典:皮肤名(小写) → 拥有该皮肤的英雄列表 skin_champ_dict = {} for champ, skins in champ_skin_dict.items(): for skin in skins: skin_lower = skin.lower() if skin_lower not in skin_champ_dict: skin_champ_dict[skin_lower] = [] skin_champ_dict[skin_lower].append(champ) # 启动反向查询循环 while True: user_skin = input('请输入皮肤名称:').lower() if user_skin in skin_champ_dict: print(', '.join(skin_champ_dict[user_skin])) else: print('没有英雄拥有该皮肤')
关键逻辑说明:
- 反向字典构建:遍历每个英雄的所有皮肤,将皮肤名转为小写作为键,把对应的英雄名称添加到值列表中,确保不同大小写的输入都能匹配到结果。
- 异常处理:针对不存在的皮肤名称,给出明确的提示信息。
- 输出优化:将英雄列表转为逗号分隔的字符串,符合你示例中的输出格式。
内容的提问来源于stack exchange,提问作者Ethan N
相关产品推荐
相关产品推荐

