我正在尝试编写一个具有两个功能的程序:
count_word_lengths,它接受参数文本,文本字符串,并返回默认字典,该字典记录每个单词长度的计数。对该函数的示例调用:
top5_lengths,它使用相同的参数文本并返回前5个字长的列表。
注意:
两个长度具有相同的频率,应按降序排序。同样,如果少于5个字长,则应返回较短的排序字长列表。
调用count_word_lengths的示例:
count_word_lengths("one one was a racehorse two two was one too"):
defaultdict(<class 'int'>, {1: 1, 3: 8, 9: 1})
调用top5_lengths的示例:
top5_lengths("one one was a racehorse two two was one too")
[3, 9, 1]
top5_lengths("feather feather feather chicken feather")
[7]
top5_lengths("the swift green fox jumped over a cool cat")
[3, 5, 4, 6, 1]
我当前的代码是这个,似乎输出了所有这些调用,但是它没有通过隐藏测试。我不考虑什么类型的输入?我的代码实际上行为正确吗?如果没有,我该如何解决?
from collections import defaultdict
length_tally = defaultdict(int)
final_list = []
def count_word_lengths(text):
words = text.split(' ')
for word in words:
length_tally[len(word)] += 1
return length_tally
def top5_word_lengths(text):
frequencies = count_word_lengths(text)
list_of_frequencies = frequencies.items()
flipped = [(t[1], t[0]) for t in list_of_frequencies]
sorted_flipped = sorted(flipped)
reversed_sorted_flipped = sorted_flipped[::-1]
for item in reversed_sorted_flipped:
final_list.append(item[1])
return final_list
最佳答案
要注意的一件事是您不考虑一个空字符串。这将导致count()返回null / undefined。您也可以在列表理解过程中使用iteritems()从for k,v in dict.iteritems():
这样的字典中获取键和值
关于list - 查找文本中的前5个字长,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36760676/