打印单词的频率,在一个句子中,在一个单独的林

2024-04-20 02:39:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个句子“狐狸跳懒狗”,我已经计算了每个单词在这个句子中出现的次数。输出应如下所示:

brown:1,dog:1,fox:1,jumps:1,lazy:1,over:1,quick:1,the:2

此输出中的字符之间不应该有空格,单词/数字之间应该有逗号。 我的程序的输出如下所示:

,brown:1,dog:1,fox:1,jumps:1,lazy:1,over:1,quick:1,the:2

我发现“brown”前面有个逗号。有没有更简单的打印方法?你知道吗

    filename = os.path.basename(path)


    with open(filename, 'r+') as f:
        fline = f.read()     
        fwords = fline.split()  

        allwords = [word.lower() for word in fwords]
        sortwords = list(set(allwords))


    r = sorted(sortwords, key=str.lower)

    finalwords = ','.join(r)

    sys.stdout.write(str(finalwords))
    print '\n'

    countlist = {}
    for word in allwords:
        try: countlist[word] += 1
        except KeyError: countlist[word] = 1       

    for c,num in sorted(countlist.items()):
        sys.stdout.write(",{:}:{:}".format(c, num))

Tags: theinforquick单词lazy句子word
1条回答
网友
1楼 · 发布于 2024-04-20 02:39:03

列出单词表的几种替代方法。首先,一行:

countlist = {word:allwords.count(word) for word in allwords}

正如DSM所指出的那样,这种方法对于长列表可能会很慢。另一种方法是使用^{}

from itertools import defaultdict
countlist = defaultdict(int)
for word in allwords:
    countlist[word] += 1

对于输出,使用,连接单个单词计数,这样可以避免在开头有一个:

sys.stdout.write(",".join(["{:}:{:}".format(key, value) for key, value in countlist .items()]))

相关问题 更多 >