Python: цикл For прекращает добавление элементов в словарь после первой итерации - PullRequest
1 голос
/ 25 мая 2019

Я пытаюсь выполнить это упражнение, где мне нужно вернуть словарь, в котором ключ - это длина слова, а значение - это само слово.

Ожидаемый результат должен быть таким:

{3: ['May', 'and'], 4: ['your'], 6: ['Monday', 'coffee', 'strong'], 2: ['be'], 5: ['short']} 

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

{3: ['and'], 4: ['your'], 6: ['Monday'], 2: ['be'], 5: ['short']}

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

def get_word_len_dict(text):
    dictionary = {}
    word_list = text.split()
    for word in word_list:
        letter = len(word)
        dictionary[letter] = [word]

    return dictionary

def test_get_word_len_dict():
    text = "May your coffee be strong and your Monday be short"
    the_dict = get_word_len_dict(text)
    print(the_dict) #should print {3: ['May', 'and'], 4: ['your'], 6: ['Monday', 'coffee', 'strong'], 2: ['be'], 5: ['short']}

1 Ответ

1 голос
/ 25 мая 2019

Некоторые комментарии к вашему исходному коду

  • Вы создаете один список элементов каждый раз, когда делаете dictionary[letter] = [word].
  • Вместо этого вы хотели бы добавить каждое слово в список, выполнив dictionary[letter].append(word).

  • Вы также можете использовать dict.setdefault для создания каждого ключавашего словаря с пустым списком, и только добавьте слово, если оно отсутствует в списке, чтобы убедиться, что слова уникальны для каждого ключа

После внесения этих изменений код будет работать

def get_word_len_dict(text):

    #Instantiate your dictionary
    dictionary = {}
    word_list = text.split()

    for word in word_list:
        letter = len(word)

        #Set default value of key as a list
        dictionary.setdefault(letter,[])

        #If the word is not present in the list, only then add it
        if word not in dictionary[letter]:
            dictionary[letter].append(word)

    return dictionary

def test_get_word_len_dict():
    text = "May your coffee be strong and your Monday be short"
    the_dict = get_word_len_dict(text)

    print(the_dict)

test_get_word_len_dict()

Выход будет

{3: ['May', 'and'], 4: ['your'], 6: ['strong', 'coffee', 'Monday'], 2: ['be'], 5: ['short']}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...