如何检查列表元素是否存在于字典的值中并提取对应键值对
可以通过遍历字典的items()方法同时获取键值对,配合字典推导式快速完成过滤:
基础实现
list0 = [ -0.2385384148158066, -0.2307061452151448, -0.2150726345799602, -0.2138622652947372, -0.1098235264547504, -0.1072424768342444, -0.1037212327115436, -0.0966926943378552, -0.09614853460521154, 9.353161396230564e-07 ] dict0 = { 67: 1.440192237446893e-05, 91: -0.1037212327115436, 115: -0.2307061452151448, 172: 0.0002879308975510175, 242: 1.340170610273099e-05, 266: -0.09614853460521154, 290: -0.2138622652947372, 347: 9.353161396230564e-07, 417: 1.462739691486375e-05, 441: -0.1072424768342444, 465: -0.2385384148158066, 513: 0.001208308075300354, 606: -0.1098235264547504, 630: -0.2442794187837403, 677: 0.0007379497093922571, 747: 1.336163063745514e-05, 771: -0.0966926943378552, 794: -0.2150726345799602 } # 核心过滤逻辑 new_dict = {k: v for k, v in dict0.items() if v in list0}
性能优化版
如果list0元素量很大,可以先转为集合提升查找效率(集合的in操作时间复杂度为O(1),远高于列表的O(n)):
set0 = set(list0) new_dict = {k: v for k, v in dict0.items() if v in set0}
输出结果
过滤后得到的new_dict内容如下:
{ 91: -0.1037212327115436, 115: -0.2307061452151448, 266: -0.09614853460521154, 290: -0.2138622652947372, 347: 9.353161396230564e-07, 441: -0.1072424768342444, 465: -0.2385384148158066, 606: -0.1098235264547504, 771: -0.0966926943378552, 794: -0.2150726345799602 }
内容的提问来源于stack exchange,提问作者Waqas_14
相关产品推荐
相关产品推荐

