You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何交换字典键值并避免重复键?值映射为集合的实现方法

解决字典键值交换时的重复键问题

这个问题我之前做文本频率统计的时候也碰到过,直接硬转键值肯定会踩字典键唯一性的坑——毕竟字典的键是唯一的嘛。下面给你两种实用的实现方式,都能把相同值对应的原键存入集合里:

方法一:手动循环处理(无需额外库)

这种方式适合不想引入额外依赖的场景,逻辑清晰易懂:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:32:47