Python字典元组类型value查找对应key无输出问题求解
问题原因
- 类型匹配错误:
input()函数返回值为字符串类型,而字典a的value为元组类型,二者直接比较永远返回False。原代码的判断条件直接将用户输入的变量和硬编码的元组字符串"('Biswajit', 'Garia', 9000000004)"做比较,完全不符合「输入姓名查询对应键」的需求。 - 循环逻辑错误:
break语句缩进位置错误,无论if条件是否成立,第一次循环执行后都会直接跳出,后续匹配逻辑永远不会执行。 - 硬编码冗余问题:
range(0,4)写死循环次数,后续字典条目变更时代码会直接失效,且lv.index()本身已具备查找位置的能力,额外写for循环属于冗余逻辑。
解决方法
核心逻辑为遍历字典键值对,匹配元组第一个元素(姓名字段)与用户输入内容,匹配成功则返回对应键:
a = {1897:("Diptojit", "Sealdah", 9000000001), 2224:("Debanjan", "Tarakeshwar", 9000000002), 1758: ("Avinesh", "Metropolitan", 9000000003), 2283: ("Biswajit", "Garia", 9000000004)} n = input("Enter name to know index : ") for k, v in a.items(): # 匹配元组第一个位置的姓名字段 if v[0] == n: print(k) break else: print("未找到匹配的姓名")
如果要沿用原代码中list.index()的实现思路,可以先提取所有姓名构建匹配列表:
a = {1897:("Diptojit", "Sealdah", 9000000001), 2224:("Debanjan", "Tarakeshwar", 9000000002), 1758: ("Avinesh", "Metropolitan", 9000000003), 2283: ("Biswajit", "Garia", 9000000004)} n = input("Enter name to know index : ") name_list = [v[0] for v in a.values()] key_list = list(a.keys()) if n in name_list: print(key_list[name_list.index(n)]) else: print("未找到匹配的姓名")
内容的提问来源于stack exchange,提问作者Mukul Mohan
相关产品推荐
相关产品推荐

