如何用Python合并文本重复子串并求和对应关联数值?
解决方案
对于你这种需求,用Python的字典来处理是最直观的,步骤简单易懂,适合初学者上手:
步骤拆解
- 分割字符串:先把输入的长字符串拆成单个的
颜色: 数值项,清理掉末尾多余的分号和无效空格。 - 累加数值:用字典存储每个颜色对应的数值总和,遍历拆分后的项,把数值转成整数后累加。
- 生成结果字符串:把字典里的键值对重新格式化成要求的字符串样式。
完整代码示例
# 输入的原始文本 input_text = "Blue: 4; Red: 1; Red: 2; Green: 3; Yellow: 10; Yellow: 15;" # 初始化空字典,用来存颜色和对应的数值总和 color_total = {} # 拆分字符串:先去掉末尾的分号,再按"; "分割成单个项 items = input_text.rstrip(';').split('; ') # 遍历每个项,处理颜色和数值 for item in items: # 拆分颜色和数值,按": "分割 color, num_str = item.split(': ') # 把字符串转成整数 num = int(num_str) # 累加数值:颜色已存在就加,不存在就初始化 if color in color_total: color_total[color] += num else: color_total[color] = num # 生成最终结果字符串 result = '; '.join([f"{color}: {total};" for color, total in color_total.items()]) # 输出结果 print(result)
运行结果
运行代码后会输出:
Blue: 4; Red: 3; Green: 3; Yellow: 25;
补充说明
rstrip(';')是为了去掉原始字符串末尾多余的分号,避免拆分后出现空字符串。split('; ')能精准拆分每个颜色: 数值项,因为每个项之间都是"; "(分号加空格)的格式。- 字典的
in操作可以快速判断颜色是否已存在,实现累加逻辑。 - 最后用
join+格式化字符串生成结果,比循环拼接字符串更高效简洁。
内容的提问来源于stack exchange,提问作者photo_east
相关产品推荐
相关产品推荐

