如何在以元组为键的字典中按州名(元组首元素)查询?
解决以元组为键的字典按州名搜索的问题
你创建了一个以元组为键的字典:
stateinfo = { ('Ohio', 'Columbus', 'Scarlet Carnation'): 11747774, ('Texas', 'Austin', 'Bluebonnet'): 30500280, ('North Carolina', 'Raleigh', 'Dogwood'): 10832061, ('Alabama', 'Montgomery', 'Camellia'): 5098746, ('Alaska', 'Juneau', 'Forget-me-not'): 732984, }
你的需求是仅根据元组的第一个索引(州名)搜索,输出对应的键和值,但之前的错误代码直接将输入的州名和整个元组键做比较,自然无法匹配:
seek = input("Please enter the State to search: ") for key, value in stateinfo.items(): if seek == key: print("yes")
正确实现方法
要实现需求,你需要在遍历字典时,取出元组键的第一个元素和输入的州名做比较,而不是直接比较整个元组。以下是修正后的代码:
stateinfo = { ('Ohio', 'Columbus', 'Scarlet Carnation'): 11747774, ('Texas', 'Austin', 'Bluebonnet'): 30500280, ('North Carolina', 'Raleigh', 'Dogwood'): 10832061, ('Alabama', 'Montgomery', 'Camellia'): 5098746, ('Alaska', 'Juneau', 'Forget-me-not'): 732984, } seek = input("Please enter the State to search: ") for key, value in stateinfo.items(): # 取出元组的第一个元素(州名)和输入值比较 if seek.strip() == key[0]: print(f"匹配到的键: {key}") print(f"对应的值: {value}") # 如果确定每个州名唯一,可以加break终止循环 break else: # 循环正常结束(没触发break)说明没找到匹配项 print("未找到该州的信息")
代码说明
key[0]用于获取元组键的第一个元素(州名),这才是你需要比较的对象。seek.strip()用于去除输入字符串两端的空格,避免因用户输入空格导致匹配失败。- 加入
else块是为了处理未找到匹配州名的情况,给出明确提示。 - 如果字典中每个州名唯一,添加
break可以在找到匹配项后立即终止循环,提升效率。
内容的提问来源于stack exchange,提问作者Justin Smith
相关产品推荐
相关产品推荐

