如何基于两个字典列表按相同id匹配生成word:lemma映射字典
Pythonic的词元映射字典实现方案
你原本的实现逻辑是完全正确的,时间复杂度已经是最优的线性复杂度,只是可以通过Python原生的字典推导式简化写法,去掉冗余的空字典初始化、逐行赋值步骤,更符合社区惯用编码风格。
具体实现
核心简化写法
和原有逻辑1:1等价,无性能损耗:
# 构建id到lemma的查找映射 id_lemma_map = {item['id']: item['lemma'] for item in lemmas} # 构建最终word到lemma的替换字典 word_lemma_dict = {item['word']: id_lemma_map[item['id']] for item in words}
鲁棒性增强版本
如果你的数据里可能存在words中的id在lemmas中无匹配的脏数据,可以用dict.get()设置兜底值,避免抛出KeyError中断程序,比如兜底保留原词不替换:
id_lemma_map = {item['id']: item['lemma'] for item in lemmas} word_lemma_dict = {item['word']: id_lemma_map.get(item['id'], item['word']) for item in words}
写法优势
- 意图清晰:字典推导式直接表明「从可迭代对象构建字典」的目的,读代码的人不需要逐行跟踪循环里的赋值逻辑
- 简洁无冗余:不需要提前声明空字典,代码更紧凑
- 性能稳定:字典推导式是Python原生优化的语法,执行效率和手写for循环相当,甚至略快于逐次键赋值的写法
- 易维护:后续如果需要加过滤条件(比如过滤掉空word、空lemma),直接在推导式里加
if判断即可,不需要改动循环结构
内容的提问来源于stack exchange,提问作者Perrupi
相关产品推荐
相关产品推荐

