Python实现:将第二个字典的值替换为第一个字典的键
替换字典中的键为映射字典对应值的解决方案
需求说明
现有两个字典:
my_dict = {1 : 1.8 , 2 : 1.2 , 3 : 0.6} mapping_dict = {1 : "Number_1_fruit" , 2 : "Number_2_fruit" , 3 : "Number_3_fruit"}
需要检查my_dict中的键是否存在于mapping_dict中,若存在则将my_dict的键替换为mapping_dict对应的取值,最终得到:
{"Number_1_fruit" : 1.8 , "Number_2_fruit" : 1.2 , "Number_3_fruit" : 0.6}
错误代码分析
你尝试的代码存在三个问题:
- 键错误:
mapping_dict[v]中,v是my_dict的值(如1.8),但mapping_dict的键是整数1、2、3,因此会触发KeyError。 - 赋值错误:应该将
my_dict[k]的原数值赋给新键,而非取mapping_dict[v]。 - 未清理旧键:仅添加新键但未删除旧键,会导致字典同时保留新旧键。
正确解决方案
方法1:创建新字典(推荐)
通过字典推导式直接生成目标字典,避免遍历原字典时修改结构的风险:
my_dict = {1: 1.8, 2: 1.2, 3: 0.6} mapping_dict = {1: "Number_1_fruit", 2: "Number_2_fruit", 3: "Number_3_fruit"} new_dict = {mapping_dict[k]: v for k, v in my_dict.items() if k in mapping_dict} print(new_dict)
输出结果:
{'Number_1_fruit': 1.8, 'Number_2_fruit': 1.2, 'Number_3_fruit': 0.6}
方法2:修改原字典
若必须修改原字典,需先收集所有待替换的键,避免遍历过程中修改字典结构引发异常:
my_dict = {1: 1.8, 2: 1.2, 3: 0.6} mapping_dict = {1: "Number_1_fruit", 2: "Number_2_fruit", 3: "Number_3_fruit"} # 先收集所有需要替换的键 keys_to_replace = [k for k in my_dict if k in mapping_dict] for k in keys_to_replace: new_key = mapping_dict[k] my_dict[new_key] = my_dict[k] # 赋值原数值给新键 del my_dict[k] # 删除旧键 print(my_dict)
输出结果与方法1一致。
内容的提问来源于stack exchange,提问作者Fanelo
相关产品推荐
相关产品推荐

