如何简洁实现Python列表元素与字典值匹配并输出对应键
更简洁的实现方式
嘿,嵌套循环确实有点冗余,咱们可以通过反转字典的方式把查询效率拉满,同时让代码更清爽!这里给你几种实用的简洁写法:
方法一:反转字典后直接索引(最推荐)
先把class_dict的键值对反转,让数字(原value)作为新字典的键,对应的类别名称(原key)作为值。这样后续遍历labels时,直接通过数字索引就能拿到结果,时间复杂度从嵌套循环的O(n*m)降到O(n),效率提升很多:
labels = [2, 7, 1, 0, 3, 2, 0, 5, 1, 6, 3, 4, 2, 9, 3, 8] class_dict = {'airplane': 0, 'automobile': 1, 'bird': 2,'cat': 3,'deer': 4,'dog': 5,'frog': 6, 'horse': 7,'ship': 8,'truck': 9} # 反转字典:{数字: 类别名称} reverse_class = {val: key for key, val in class_dict.items()} # 遍历labels直接输出对应类别 for num in labels: print(reverse_class[num])
方法二:列表推导式一次性生成结果
如果需要把结果先存成列表再处理,用列表推导式更紧凑:
reverse_class = {val: key for key, val in class_dict.items()} category_list = [reverse_class[num] for num in labels] # 可以直接打印列表,或者按行输出 print(category_list) # 或者逐行打印 print('\n'.join(category_list))
方法三:用map函数简化(一行流)
追求极简的话,map函数可以帮你把遍历和映射合并成一行:
reverse_class = {val: key for key, val in class_dict.items()} print('\n'.join(map(lambda x: reverse_class[x], labels)))
小提醒:处理未知数字
如果labels里可能存在class_dict中没有的数字,可以用get方法避免KeyError:
print(reverse_class.get(num, '未知类别')) # 找不到时返回'未知类别'
内容的提问来源于stack exchange,提问作者unim192745
相关产品推荐
相关产品推荐

