построить словарь, для которого значение является средней длиной слова - PullRequest
0 голосов
/ 20 сентября 2018

Вот требования:

Напишите функцию, которая принимает словарь, в котором ключ представляет собой букву, а значение представляет собой список слов, начинающихся с этой буквы, и возвращает словарь, в котором ключ является буквой.а значение - это средняя длина слов в списке

Например, если 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 голосов
/ 20 сентября 2018

Вы получаете неправильные значения, потому что эта формула неверна:

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

, вероятно, следует использовать сумму, вычисленную в строке выше.Итак:

ave=float(length)/len(lis)

Так что вам не нужно вычислять это на каждой итерации.Ну, это должно исправить это.

Теперь, для более "питонического" решения, я бы сделал с пониманием словаря, а обычный 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}
0 голосов
/ 20 сентября 2018

Вы получаете список чисел, потому что это то, что вы просите со строкой: 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

Делая это, вы создаете новый словарь, который вы можете заполнить новыми ключами (буквами) и их соответствующими значениями (средняя длина)).

0 голосов
/ 20 сентября 2018

Вы можете сделать это следующим образом.

Ваши средние значения должны быть 4,25 и 4,66667.5 букв в 3 словах в списке и 2 буквы в другом слове (5 + 5 + 5 + 2) / 4 = 4,25

Вы хотите инициализировать пустой словарь вверху, а затемитерация по word_dictionary.items(), которая перебирает и ключ, и элементы в вашем словаре.Для элемента items, lis, вы создаете пустой список вне внутреннего цикла и добавляете длину каждого слова, как только оно заканчивается, оно принимает среднее значение длины слова и, наконец, создает новую запись в словаре.где ключ (ваши значения 'a', 'b' из word_dictionary) = среднее значение.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...