为字典中非VDD、GND的重复值分配从1开始的唯一ID
问题解决方法
你的代码存在两个关键问题:
- 语法错误:
if b != :缺少比较对象,会直接触发语法报错 - 逻辑错误:直接修改原字典的同时,没有记录已处理的原始值,导致相同值会被分配不同ID,且后续循环无法获取原始值做判断
要实现相同值对应相同ID的需求,正确的思路是先为所有需要替换的唯一值建立ID映射,再批量替换。具体代码如下:
my_dict = {1: 'VDD', 2: 'VDD', 7: 'VDD', 0: 0, 3: 0, 4: 0, 6: 9, 13: 9, 'GND': 'GND', 15: 'GND', 12: 12} # 构建原始值到ID的映射字典 value_id_map = {} current_id = 1 # 先遍历一次字典,为每个唯一的非VDD/GND值分配ID for val in my_dict.values(): if val not in ('VDD', 'GND') and val not in value_id_map: value_id_map[val] = current_id current_id += 1 # 遍历字典替换目标值 for key in my_dict: if my_dict[key] in value_id_map: my_dict[key] = value_id_map[my_dict[key]] print(my_dict)
运行后输出结果:
{1: 'VDD', 2: 'VDD', 7: 'VDD', 0: 1, 3: 1, 4: 1, 6: 2, 13: 2, 'GND': 'GND', 15: 'GND', 12: 3}
逻辑说明
- 用
value_id_map存储每个需要替换的原始值对应的ID,确保相同值只会被分配一次递增的ID - 第二次遍历字典时,仅将存在于映射表中的值替换为对应ID,保留'VDD'和'GND'不变
内容的提问来源于stack exchange,提问作者donatello
相关产品推荐
相关产品推荐

