如何根据整数获取值为列表的Python字典对应的键?
问题
现有如下Python字典:
my_dict = {'C': [1,2,3,4,5,6,7,8,9,10,11,12,15,18,46,64,67,73,78,83], 'B': [13,14,22,32,38,39,42,59,68,74,79,84], 'A': [16,17,19,23,31,37,40,50,51,60,70,75,80,85], 'S': [20,25,33,36,43,44,48,49,57,61,62,63,71,76,81,86,88,89,92,94], 'SS': [21,24,26,47,52,53,54,56,66,69,72,77,82,87,91,93], 'SS+': [27,28,29,30,34,35,41,45,55,58,65,90,95,96,97,98], 'SSS': [99,100]}
需求是输入整数(比如78)时,返回对应的键(比如'C')。尝试用以下代码实现:
my_dict_key = list(my_dict.keys())[list(my_dict.values()).index(my_dict_key)]
但报错:ValueError: 78 is not in list,请问该如何实现?
解决方案
报错原因很明确:list(my_dict.values())得到的是列表的列表,你用index(78)是在找整个列表元素等于78,显然不存在,所以触发错误。下面提供两种可行的实现方式:
方法1:直接遍历查找
适合偶尔查询的场景,逻辑直观:
def get_level(num): for level, nums in my_dict.items(): if num in nums: return level return None # 未找到时返回None # 测试示例 print(get_level(78)) # 输出 'C' print(get_level(99)) # 输出 'SSS'
方法2:预构建反向字典(高效多次查询)
如果需要频繁查询,建议预先构建一个反向映射字典,将每个整数直接对应到其等级,后续查询效率为O(1):
# 构建反向字典 level_map = {} for level, nums in my_dict.items(): for num in nums: level_map[num] = level # 测试示例 print(level_map.get(78)) # 输出 'C' print(level_map.get(100)) # 输出 'SSS'
内容的提问来源于stack exchange,提问作者Silense
相关产品推荐
相关产品推荐

