字符串列表去重合并与分组统计:指定输出格式实现求助
水果数据统计格式转换问题
我有如下格式的字符串列表:
"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)}')
解决思路
原代码逻辑过于复杂,状态判断容易出错。可以用字典分组存储的方式简化处理:
- 按水果名称作为key,统一管理对应水果的总出现次数、日期、关联字母集合
- 遍历数据时,自动统计次数、用集合去重字母,无需手动判断重复
- 最后遍历字典,按要求格式输出
实现代码
# 假设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
相关产品推荐
相关产品推荐

