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

Checkio任务求助:统计指定单词在文本中的出现次数并生成字典

嘿,我来帮你搞定这个Checkio的任务!看起来你已经走了大半路,咱们把剩下的步骤理清楚就行。

首先,先明确任务的核心要求:

  • 忽略大小写(比如文本里的I要和目标列表里的i匹配)
  • 统计目标单词的出现次数,没出现的单词要返回0
  • 最终输出是键为目标单词、值为次数的字典

基础实现思路(一步步来)

我们可以拆解成这几步:

  1. 统一大小写:把整个文本和目标单词都转成小写,避免大小写敏感的问题。
  2. 拆分文本为单词列表:把处理后的文本拆成单个单词。
  3. 初始化结果字典:给每个目标单词设置初始计数0,确保没出现的单词不会遗漏。
  4. 遍历计数:逐个检查拆分后的单词,只要在目标列表里就增加对应计数。

代码实现如下:

def popular_words(text, words):
    # 把文本转为小写,并按空白字符拆分成单词列表
    lower_text_words = text.lower().split()
    # 初始化结果字典,所有目标单词计数默认0
    count_dict = {word: 0 for word in words}
    # 遍历每个单词,更新计数
    for word in lower_text_words:
        if word in count_dict:
            count_dict[word] += 1
    return count_dict

测试一下你的示例:

print(popular_words(''' When I was One I had just begun When I was Two I was nearly new ''', ['i', 'was', 'three', 'near']))
# 输出: {'i': 4, 'was': 3, 'three': 0, 'near': 0}

完全符合要求!

更简洁的实现(用collections.Counter)

如果想让代码更简洁,可以用Python内置的Counter类来自动统计单词次数,然后再补全目标单词的0值:

from collections import Counter

def popular_words(text, words):
    # 统计所有小写单词的出现次数
    word_counter = Counter(text.lower().split())
    # 用字典推导式生成结果,不存在的单词返回0
    return {word: word_counter.get(word, 0) for word in words}

这个写法更高效,Counter会帮我们完成大部分统计工作,get方法可以直接指定默认值0,非常方便。

额外注意:处理带标点的文本

如果任务中的文本可能包含标点(比如Hello, world!),直接split()会得到['hello,', 'world!'],这时候目标单词hello就匹配不上了。这时候可以用正则表达式来提取纯单词:

import re
from collections import Counter

def popular_words(text, words):
    # 提取所有字母/撇号组成的单词(支持don't这类形式),转小写
    clean_words = re.findall(r"\b[\w']+\b", text.lower())
    word_counter = Counter(clean_words)
    return {word: word_counter.get(word, 0) for word in words}

这个版本能处理更复杂的文本场景,不过要看Checkio的具体测试用例是否需要。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:25:50