在单行中打印单词中单词的频率

时间:2014-01-18 00:11:57

标签: 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))

1 个答案:

答案 0 :(得分:1)

另外几种制作单词列表的方法。首先,单线:

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

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

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()]))