以下是要求:
编写一个接受字典的函数,该字典的键是字母, 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
有人可以帮忙吗?
答案 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
这样做,您将创建一个新词典,您可以在其中填充新键(字母)及其对应的值(平均长度)。