我正在尝试编写一个具有两个功能的程序:


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/

10-09 04:15