Python:根据字典映射替换ID列表为名称列表失败,求排查
问题分析与解决方案
哦,我一眼就发现问题所在了——你把字典的键值对搞反了!
问题根源
你手里的原始字典是「ID为键,名称为值」的结构(比如{'16411': 'Itgax'}),但你执行了这行代码:
rev_subs = { v:k for v,k in dictionary.items()}
这直接把字典反转成了「名称为键,ID为值」的结构。当你用rev_subs.get(item, item)去查找时,item是ID字符串,而反转后的字典里根本没有以ID为键的条目,所以get方法会返回默认值item本身,最终new_list自然和原ids列表完全一致。
修正方案
不需要反转字典,直接用原始字典的get方法就能完成替换:
with open('/home/anja/Schreibtisch/Master/ABA/alltogether/filelist.txt') as f: ids = [line.strip() for line in f.read().split('\n')] # 去掉反转字典的步骤,直接用原字典 new_list = [dictionary.get(item, item) for item in ids]
这样当item(ID)在字典的键中存在时,会返回对应的名称;如果不存在,就保留原ID,完全符合你的需求。
额外调试建议
为了确保万无一失,你可以先打印原始字典的前几个条目,确认键的格式和ids里的元素完全匹配(比如有没有多余空格、大小写差异):
print(list(dictionary.items())[:5]) # 打印前5个键值对 print(ids[:5]) # 打印前5个ID
如果两者的格式一致,修正后的代码就能正常工作啦。
内容的提问来源于stack exchange,提问作者Anja
相关产品推荐
相关产品推荐

