合并不同长度列表:基于分数匹配评论与评分
解决方案
首先明确核心逻辑:list1中每条评论的前缀标识(比如1在1 Liked里),和list2中评分对应的标识(比如score 1里的1)是匹配关联的,我们需要按这个标识分组,把对应评分和评论组合到一起。
步骤1:预处理评论列表,按标识分组
先把list1的评论按标识归类,同时区分Liked/Disliked类型,确保Liked优先保留:
list1 = ["1 Liked: Great product", "1 Disliked: Slow shipping", "2 Disliked: Poor quality", "3 Liked: Excellent service"] comment_groups = {} for comment in list1: # 拆分标识、评论类型、内容三部分 parts = comment.split(" ", 2) item_id = parts[0] comment_type = parts[1] content = parts[2] # 初始化当前标识的分组 if item_id not in comment_groups: comment_groups[item_id] = {"liked": None, "disliked": None} # 存入对应类型的评论内容 if comment_type == "Liked": comment_groups[item_id]["liked"] = content elif comment_type == "Disliked": comment_groups[item_id]["disliked"] = content
步骤2:遍历评分列表,匹配对应评论组合
处理list2,提取每个评分的标识,从分组中取出评论并按要求组合:
list2 = ["score 1: 4.5", "score 2: 2.0", "score 3: 5.0"] result = [] for score_item in list2: # 拆分评分的标识和分数值 score_parts = score_item.split(" ", 2) item_id = score_parts[1] score = score_parts[2] # 获取当前标识对应的评论组 group = comment_groups.get(item_id, {}) combined_comments = [] # 优先添加Liked评论(如果存在) if group.get("liked"): combined_comments.append(f"Liked: {group['liked']}") # 添加Disliked评论(如果存在) if group.get("disliked"): combined_comments.append(f"Disliked: {group['disliked']}") # 组合评分与评论,存入结果列表 result.append(f"Score {score} | Comments: {' | '.join(combined_comments)}")
示例输出
运行后result的内容为:
[ "Score 4.5 | Comments: Liked: Great product | Disliked: Slow shipping", "Score 2.0 | Comments: Disliked: Poor quality", "Score 5.0 | Comments: Liked: Excellent service" ]
为什么zip不行?
zip是按列表索引一一对应,但你的两个列表长度不同,且评论与评分是按标识关联而非索引顺序关联,所以用字典分组匹配才是正确思路,zip无法处理这种非索引对应的关联场景。
内容的提问来源于stack exchange,提问作者Coding with noob
相关产品推荐
相关产品推荐

