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

字符串列表去重合并与分组统计:指定输出格式实现求助

水果数据统计格式转换问题

我有如下格式的字符串列表:

"a 05/13/22 apple"        
"a 05/13/22 apple"        
"b 05/13/22 apple"        
"b 05/13/22 apple"        
"c 05/13/22 apple"        
"c 05/13/22 apple"        
"a 05/27/22 strawberry"   
"a 05/27/22 strawberry"   
"b 05/27/22 strawberry"   
"b 05/27/22 strawberry"   
"c 05/27/22 strawberry"   
"c 05/27/22 strawberry"   
"a 07/29/22 banana"       
"a 07/29/22 banana"       
"b 07/29/22 banana"       
"b 07/29/22 banana"       
"c 07/29/22 banana"       
"c 07/29/22 banana"       

我已将每个字符串拆分为letter、date、fruit三个独立值,希望输出以下格式的结果:

6 occurrences found for apple 
05/13/22 apple [a,b,c]

6 occurrences found for strawberry
05/27/22 strawberry [a,b,c]

6 occurrences found for banana
07/29/22 banana [a,b,c]  

尝试用以下循环代码处理,但逻辑有误,无法得到正确结果:

fruit_exists = []
pexists = []
pfruit, pdate, pletters = '','',[]
for instance in fruit_info:
        letter, date, fruit = instance.split()
        if fruit not in fruit_exists:
            fruit_exists.append(fruit)    
        if pdate == '':
            pfruit = fruit
            pdate = date
        if pdate+pfruit not in pexists:
            if letter not in pletters:
                pletters.append(letter)
            if pdate != date:
                print(f'{pdate} - {pfruit} for {", ".join(pletters)}')
                pexists.append(pdate+pfruit)
                pfruit = fruit
                pdate = date
                pletters = []
    print(f'{pdate} - {pfruit} for {", ".join(pletters)}')

解决思路

原代码逻辑过于复杂,状态判断容易出错。可以用字典分组存储的方式简化处理:

  1. 按水果名称作为key,统一管理对应水果的总出现次数、日期、关联字母集合
  2. 遍历数据时,自动统计次数、用集合去重字母,无需手动判断重复
  3. 最后遍历字典,按要求格式输出

实现代码

# 假设fruit_info是已拆分前的原始字符串列表
fruit_info = [
    "a 05/13/22 apple",
    "a 05/13/22 apple",
    "b 05/13/22 apple",
    "b 05/13/22 apple",
    "c 05/13/22 apple",
    "c 05/13/22 apple",
    "a 05/27/22 strawberry",
    "a 05/27/22 strawberry",
    "b 05/27/22 strawberry",
    "b 05/27/22 strawberry",
    "c 05/27/22 strawberry",
    "c 05/27/22 strawberry",
    "a 07/29/22 banana",
    "a 07/29/22 banana",
    "b 07/29/22 banana",
    "b 07/29/22 banana",
    "c 07/29/22 banana",
    "c 07/29/22 banana"
]

# 初始化存储结构:key为水果名,value存储统计数据
fruit_stats = {}

for item in fruit_info:
    letter, date, fruit = item.split()
    if fruit not in fruit_stats:
        # 首次遇到该水果,初始化统计项
        fruit_stats[fruit] = {
            "total": 1,
            "date": date,
            "letters": {letter}
        }
    else:
        # 更新已有水果的统计数据
        fruit_stats[fruit]["total"] += 1
        fruit_stats[fruit]["letters"].add(letter)

# 按要求格式输出结果
for fruit, stats in fruit_stats.items():
    print(f"{stats['total']} occurrences found for {fruit}")
    # 将字母集合转为逗号分隔的字符串,包裹在[]中
    letters_str = ",".join(sorted(stats["letters"]))
    print(f"{stats['date']} {fruit} [{letters_str}]\n")

代码说明

  • 用字典fruit_stats集中管理每个水果的所有统计数据,逻辑清晰,避免复杂的状态切换
  • 使用集合letters自动去重字母,省去手动判断重复的步骤
  • 最终遍历字典输出,完全匹配期望的格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:54:25