我有一句话“快速狐狸跳过懒狗”,我已经计算了这个句子中每个单词出现的次数。输出应该是这样的:
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))
答案 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()]))