建立字典,其值是单词的平均长度

时间:2018-09-20 19:14:24

标签: python python-3.x dictionary

以下是要求:

编写一个接受字典的函数,该字典的键是字母, value是一个以该字母开头的单词列表,并返回一个字典,其中的键是字母,值是 列表中单词的平均长度

例如,如果为word_dictionary={"a":['am','apple','along','alive'],"b":['big','believe','beef']},则结果应为{"a":4.25, "b"=4.6666667}

这是我现在所做的:

word_dictionary={"a":['am','apple','along','alive'],"b":['big','believe','beef']}
def average_word(word_dictionary):
    for lis in word_dictionary.values():
        length=0
        ave=0
        for word in lis:
            length+=len(word)
            ave=float(len(word))/len(lis)
            print(ave)

不幸的是,我的结果不是字典,而是像这样的数字列表:

0.5
1.25
1.25
1.25
1.0
2.3333333333333335
1.3333333333333333

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

由于此公式有误,您获得了错误的值:

ave=float(len(word))/len(lis)

应该使用上面计算的总和。所以:

ave=float(length)/len(lis)

因此,您无需在每次迭代时都进行计算。好吧,那应该解决它。

现在,对于更“ pythonic”的解决方案,我将使用字典理解,而通常的sum / len使用对sum的理解

word_dictionary={"a":['am','apple','along','alive'],"b":['big','believe','beef']}

result = {k:(sum(len(x) for x in v)/len(v)) for k,v in word_dictionary.items()}

我的结果是正确的(您似乎有点不满意):

{'a': 4.25, 'b': 4.666666666666667}

答案 1 :(得分:0)

您可以这样做。.

您的平均值应为4.25和4.66667。列表中3个单词中的5个字母,另一个单词中的2个字母(5 + 5 + 5 + 2)/ 4 = 4.25

您要在顶部初始化一个空字典,然后遍历word_dictionary.items(),该遍历遍历字典中的键和项。对于项lis,您可以在内循环之外创建一个空列表,并附加每个单词的长度,完成后,将取每个单词长度的平均值,最后在中创建一个新条目字典,其中键(word_dictionary中的“ a”,“ b”值)=平均值。

def get_word_length_dict(some_dictionary):
    new_word_dictionary = {}        
    for key, lis in some_dictionary.items():
        word_values = []
        for word in lis:
            word_values.append(len(word))
        avg = np.array(word_values).mean()
        new_word_dictionary[key] = avg
        return new_word_dictionary

get_word_length_dict(word_dictionary)

答案 2 :(得分:0)

您会得到一个数字列表,因为这是您要使用的行:print(ave)

它打印所有这些不同的数字,因为您将打印语句放在了两个循环中。

您真的想要类似的东西吗?

word_dictionary={"a":['am','apple','along','alive'],"b":['big','believe','beef']}

def average_word(word_dictionary):
    average_length_dictionary = {}
    for letter, words in word_dictionary.items():
        length = 0
        for word in words:
            length += len(word)
        average_length_dictionary[letter] = length/len(words)
    return average_length_dictionary

这样做,您将创建一个新词典,您可以在其中填充新键(字母)及其对应的值(平均长度)。