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

Python如何移除字典中顺序相反的重复键对

解决字典中逆序重复键对的去重问题

我来帮你搞定这个需求——要移除字典里那些逆序的重复键对(比如('cat', 'tiger')和('tiger', 'cat')视为同一组),核心思路是给每个键对生成一个标准化的唯一标识,让逆序的键对映射到同一个标识,这样就能轻松实现去重了。

核心实现思路

对于每个二元组形式的键,我们可以对其进行排序处理:比如把('tiger', 'cat')排序后变成('cat', 'tiger'),这样所有逆序的键对都会得到完全相同的标准化键。之后我们只需要根据这个标准化键来过滤重复项即可。

代码实现示例

场景1:保留标准化后的键(排序后的元组)

这种方式会把所有逆序键对统一成排序后的形式,值保留首次遇到的那个:

original_dict = {('cat', 'tiger'): 18, ('tiger', 'cat'): 18, ('cage', 'cat'): 5, ('cat', 'cage'): 5}

unique_dict = {}
for key, value in original_dict.items():
    # 对键进行排序,生成唯一的标准化键
    normalized_key = tuple(sorted(key))
    # 仅当标准化键未出现过时,才添加到新字典
    if normalized_key not in unique_dict:
        unique_dict[normalized_key] = value

print(unique_dict)
# 输出: {('cat', 'tiger'): 18, ('cage', 'cat'): 5}

场景2:保留原始键的格式(保留首次出现的原始键)

如果你想保留字典中第一次出现的原始键格式,而不是标准化后的键,可以用一个集合来记录已经处理过的标准化键:

original_dict = {('cat', 'tiger'): 18, ('tiger', 'cat'): 18, ('cage', 'cat'): 5, ('cat', 'cage'): 5}

unique_dict = {}
seen_keys = set()

for key, value in original_dict.items():
    normalized_key = tuple(sorted(key))
    if normalized_key not in seen_keys:
        seen_keys.add(normalized_key)
        unique_dict[key] = value

print(unique_dict)
# 输出: {('cat', 'tiger'): 18, ('cage', 'cat'): 5}

场景3:合并重复键对的值(比如求和)

如果你的需求不是移除重复项,而是合并它们的值(比如把重复键对的数值相加),可以调整逻辑如下:

original_dict = {('cat', 'tiger'): 18, ('tiger', 'cat'): 18, ('cage', 'cat'): 5, ('cat', 'cage'): 5}

merged_dict = {}
for key, value in original_dict.items():
    normalized_key = tuple(sorted(key))
    # 如果标准化键已存在,就合并值;否则添加新条目
    if normalized_key in merged_dict:
        merged_dict[normalized_key] += value  # 这里可以换成max()、min()等其他合并逻辑
    else:
        merged_dict[normalized_key] = value

print(merged_dict)
# 输出: {('cat', 'tiger'): 36, ('cage', 'cat'): 10}

适配性说明

这种方法完全适配所有逆序键对的场景,不管你的字典键是像('cage', 'cat')这样的字符串二元组,还是其他可排序类型的二元组(比如数字元组),都能正常工作。

内容的提问来源于stack exchange,提问作者TiShow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:00:04