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

Python中合并字典内无序重复元组键并累加对应值的方法

合并字典中元素相同的元组键并累加值

嘿,我来帮你搞定这个字典键合并的问题!你的需求是把元素相同但顺序不同的元组键(比如('A','B')和('B','A'))合并,并且累加它们对应的值,最终得到{('A','B'): 8, ('A','C'): 4}这样的结果。

推荐解决方案

这里有个简洁可靠的实现方式,既可以处理普通情况,也能兼容元组内有重复元素的场景:

my_dict = {('A','B'): 3, ('A','C'): 4, ('B','A'): 5}

# 第一步:先按排序后的元组统一键,累加所有对应值
temp_dict = {}
for key, val in my_dict.items():
    sorted_key = tuple(sorted(key))
    temp_dict[sorted_key] = temp_dict.get(sorted_key, 0) + val

# 第二步:保留原字典中第一次出现的键(可选,如果你想保留原键的顺序)
final_dict = {}
seen_keys = set()
for original_key, _ in my_dict.items():
    sorted_key = tuple(sorted(original_key))
    if sorted_key not in seen_keys:
        final_dict[original_key] = temp_dict[sorted_key]
        seen_keys.add(sorted_key)

print(final_dict)  # 输出: {('A', 'B'): 8, ('A', 'C'): 4}

思路解释

  • 统一键标识:用tuple(sorted(key))把元组键排序,这样不管原元组的顺序如何,元素相同的元组都会生成完全一致的排序后元组(比如('A','B')和('B','A')排序后都是('A','B')),以此作为临时字典的键来累加值。
  • 还原原键(可选):如果需要保留原字典中第一次出现的那个键(而不是排序后的键),可以再遍历一次原字典,用集合记录已经处理过的排序键,确保每个合并组只保留第一个出现的原键。

原代码的问题分析

你最初尝试的代码里用了my_dict.pop(k),这会在遍历过程中修改原字典的结构,容易导致遍历遗漏或者抛出异常。另外用set(k) == set(key)来判断元素相同的方式有缺陷——如果元组里有重复元素(比如('A','A','B')和('A','B','B')),转成集合后会丢失重复信息,导致错误合并。而排序的方法可以完美避免这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:47:38