Python如何检查列表元素是否存在于字典键中并替换为对应值
问题解决
原代码错误点
- 遍历过程调用
append()会向列表尾部追加内容,而非修改原有位置的匹配元素,无法得到预期的替换结果 - 追加的是
dict1.values()整个字典值视图对象,而非单个匹配键对应的取值 - 你遇到的
TypeError: unhashable type: 'dict_keys'属于笔误类错误,通常是误将dict.keys()返回的视图对象作为需要哈希类型的参数(比如字典键、集合元素)使用导致,你贴出的循环代码本身不会触发该报错
实现代码
写法1:列表推导式(最简洁,推荐)
如果需要只保留匹配到的元素,直接用:
list1 = ['Customer_Number', 'First_Name', 'Last_Name'] dict1 = {'Customer_Number': 'A', 'First_Name': 'B', 'Middle_Name': 'C', 'Last_Name': 'D', 'Org_Names': 'E'} result = [dict1[ele] for ele in list1 if ele in dict1]
如果需要保留未匹配到的原元素,修改为:
result = [dict1.get(ele, ele) for ele in list1]
写法2:直接修改原列表
如果需要修改原列表而非生成新列表,用枚举遍历索引修改:
for idx, ele in enumerate(list1): if ele in dict1: list1[idx] = dict1[ele]
输出结果
运行以上代码均可得到预期输出:
['A', 'B', 'D']
优化提示
判断元素是否为字典的键,不需要写ele in dict1.keys(),直接写ele in dict1即可,执行逻辑完全一致且运行效率更高。
内容的提问来源于stack exchange,提问作者Naveen Gupta
相关产品推荐
相关产品推荐

