合并列表中moment枚举值相同的多组Credit对象技术问询
合并相同moment枚举值的Credit对象并累加value值
你需要合并列表中拥有相同moment枚举值的Credit对象,将它们的value值累加。先看个直观的示例:
输入:
[Credit(value=111, moment=<CreditMoment.APP: 'APP'>), Credit(value=222, moment=<CreditMoment.APP: 'APP'>), Credit(value=444, moment=<CreditMoment.OFFER: 'OFFER'>)]预期结果:
[Credit(value=333, moment=<CreditMoment.APP: 'APP'>), Credit(value=444, moment=<CreditMoment.OFFER: 'OFFER'>)]
解决方案思路
核心是先按moment枚举值分组,累加每组的value,再重新构建Credit对象列表。下面是完整的可运行代码:
1. 定义基础类(如果还未定义)
from enum import auto, Enum from typing import List class CreditMoment(str, Enum): APP = auto() OFFER = auto() COMPLETION = auto() class Credit: def __init__(self, value: int, moment: CreditMoment): self.value = value self.moment = moment def __repr__(self): # 自定义字符串展示,让结果更直观 return f"Credit(value={self.value}, moment=<CreditMoment.{self.moment.name}: '{self.moment.value}'>)"
2. 实现合并函数
def merge_credits(credit_list: List[Credit]) -> List[Credit]: # 用字典分组存储每个moment对应的总value moment_value_map = {} for credit in credit_list: # 累加value:如果moment已存在就加,不存在就初始化 moment_value_map[credit.moment] = moment_value_map.get(credit.moment, 0) + credit.value # 把字典转换回Credit对象列表 return [Credit(value=total_value, moment=moment) for moment, total_value in moment_value_map.items()]
3. 测试验证
# 模拟你的输入 input_credits = [ Credit(value=111, moment=CreditMoment.APP), Credit(value=222, moment=CreditMoment.APP), Credit(value=444, moment=CreditMoment.OFFER) ] # 执行合并 result = merge_credits(input_credits) print(result) # 输出和预期完全一致: # [Credit(value=333, moment=<CreditMoment.APP: 'APP'>), Credit(value=444, moment=<CreditMoment.OFFER: 'OFFER'>)]
额外说明
如果你的Credit类还有其他属性(比如fee_value这类),只要相同moment下这些属性是一致的,你可以在创建新Credit对象时一并传入;如果存在属性不一致的情况,你可能需要额外处理(比如保留第一个对象的属性,或者抛出提示)。
内容的提问来源于stack exchange,提问作者Radosław Hryniewicki
相关产品推荐
相关产品推荐

