如何交换字典键值并避免重复键?值映射为集合的实现方法
解决字典键值交换时的重复键问题
这个问题我之前做文本频率统计的时候也碰到过,直接硬转键值肯定会踩字典键唯一性的坑——毕竟字典的键是唯一的嘛。下面给你两种实用的实现方式,都能把相同值对应的原键存入集合里:
方法一:手动循环处理(无需额外库)
这种方式适合不想引入额外依赖的场景,逻辑清晰易懂:
original_dict = {'loves': 3, 'coding': 3} swapped_dict = {} for key, value in original_dict.items(): # 检查当前值是否已经是新字典的键 if value not in swapped_dict: # 不存在就创建一个空集合作为对应值 swapped_dict[value] = set() # 把原键添加到对应的集合中 swapped_dict[value].add(key) print(swapped_dict) # 输出: {3: {'loves', 'coding'}}
方法二:用collections.defaultdict简化代码
如果追求代码简洁,用Python标准库的defaultdict能省掉判断键是否存在的步骤:
from collections import defaultdict original_dict = {'loves': 3, 'coding': 3} # 初始化一个默认值为集合的字典 swapped_dict = defaultdict(set) for key, value in original_dict.items(): # 直接添加原键,不存在的键会自动创建空集合 swapped_dict[value].add(key) # 可选:如果需要转换成普通字典(defaultdict是dict的子类,多数场景下不用转) swapped_dict = dict(swapped_dict) print(swapped_dict) # 输出: {3: {'loves', 'coding'}}
两种方式最终都能得到{3: {'loves', 'coding'}}这样的结果,既完成了键值交换,又不会丢失任何数据。集合的特性也保证了即使原字典(虽然原字典键不会重复)有重复键,也能自动去重。
内容的提问来源于stack exchange,提问作者abadawi
相关产品推荐
相关产品推荐

