Python如何通过列表元素匹配字典键获取对应值
匹配字典键获取对应值实现方案
你现有代码仅匹配了root列表的第一个元素,且通过遍历字典所有键做相等判断的写法没有利用字典按键查询的O(1)效率优势,可参考以下方式实现:
- 前置优化点
- 代码开头
from turtle import clear为无用导入,可直接删除 - 列表做成员判断(
i not in VP)的时间复杂度为O(n),数据量大时建议先将VP转为集合,可把判断速度提升数个量级,你注释里的集合写法就是用于这个优化的 - 用
zip(SP,VP)构建字典时,如果SP列存在重复值,后出现的键值对会覆盖前序同键的内容,如果需要保留所有映射关系,可以构建值为列表的字典,常规单值匹配场景下现有写法可正常使用
- 代码开头
- 单元素查询方法
字典原生支持按键直接取值,不需要遍历所有键,推荐用get()方法做安全查询,避免键不存在时抛出异常:# 查询root第一个元素对应的值,键不存在时返回None,也可自定义默认返回值 first_val = d.get(root[0], default="无匹配值") print(first_val) - 批量匹配root所有元素的对应值
遍历root列表做查询即可,不要遍历字典键:import pandas as pd df = pd.read_excel(r'path').fillna("@Null$tring").sort_values(by=['VP']) SP = df['SP'].tolist() VP = df['VP'].tolist() # 转集合优化成员判断速度 vp_set = set(VP) root = [i for i in SP if i not in vp_set] d = dict(zip(SP, VP)) # 存储所有匹配结果 match_res = {} for item in root: match_res[item] = d.get(item, default="未找到匹配值") print(match_res)
如果仅需要打印匹配结果,不需要存储,可直接在遍历中输出:
for item in root: print(f"匹配键:{item},对应值:{d.get(item)}")
内容的提问来源于stack exchange,提问作者Anthony Admin
相关产品推荐
相关产品推荐

