基于元组键首项合并元组项字典的实现方法
问题:合并元组键字典并转换为指定格式的元组列表
给定如下输入字典和期望输出,需要按元组键的第一个值合并(求和对应值),保留任意一个第二个值,最终转换成指定格式的元组列表:
input_dict = {("1", "a"): 1.0, ("1", "b"): 2.0, ("2", "a"): 4.0} desired_output = [(4, "2", "a"), (3, "1", "a")]
第一步:按元组键首元素合并求和(解决你卡壳的步骤)
这里提供两种实现方式,选一种即可:
方式1:用collections.defaultdict分组
from collections import defaultdict merged = defaultdict(lambda: {'sum': 0.0, 'second': None}) for (first, second), val in input_dict.items(): merged[first]['sum'] += val # 只记录该分组下第一个遇到的第二个元素 if merged[first]['second'] is None: merged[first]['second'] = second # 转换成目标字典格式 desired_step_1_output = {(k, v['second']): v['sum'] for k, v in merged.items()} # 输出:{('1', 'a'): 3.0, ('2', 'a'): 4.0}
方式2:普通字典实现(无需导入模块)
merged = {} for (first, second), val in input_dict.items(): if first not in merged: # 首次遇到该首元素,记录总和和第二个元素 merged[first] = {'sum': val, 'second': second} else: # 已有该首元素,只累加值 merged[first]['sum'] += val desired_step_1_output = {(k, v['second']): v['sum'] for k, v in merged.items()}
后续步骤(你的原有流程)
拿到第一步的结果后,按你原来的步骤2-4执行即可:
# 步骤2:按值降序排序并转成元组列表 output_step_2 = sorted(desired_step_1_output.items(), key=lambda item: item[1], reverse=True) # 输出:[(('2', 'a'), 4.0), (('1', 'a'), 3.0)] # 步骤3:调换值和键的位置 output_step_3 = [(value, keys) for keys, value in output_step_2] # 输出:[(4.0, ('2', 'a')), (3.0, ('1', 'a'))] # 步骤4:转整数并展开元组 output_step_4 = [(int(value), *keys) for value, keys in output_step_3] # 输出:[(4, '2', 'a'), (3, '1', 'a')]
更简洁的整合写法
可以把所有步骤合并成一段代码,省去中间变量:
from collections import defaultdict input_dict = {("1", "a"): 1.0, ("1", "b"): 2.0, ("2", "a"): 4.0} # 分组求和,同时记录第二个元素 grouped = defaultdict(lambda: (0.0, None)) for (first, second), val in input_dict.items(): current_sum, current_second = grouped[first] grouped[first] = (current_sum + val, current_second if current_second is not None else second) # 直接转换为目标格式并排序 result = sorted( [(int(total), first, second) for first, (total, second) in grouped.items()], key=lambda x: x[0], reverse=True ) print(result) # 输出:[(4, '2', 'a'), (3, '1', 'a')]
内容的提问来源于stack exchange,提问作者Charles Lehnen
相关产品推荐
相关产品推荐

