Необходимо создать огромное сложное понимание списка, чтобы создать словарь списка значений ASCII в Python, который нельзя использовать для цикла вне списка.

#python #list #dictionary #list-comprehension

Вопрос:

Ниже приведен мой код до сих пор вместе с инструкциями в строке документа.

 def get_word_codes(words):
"""Given a list of words, return a dictionary where the words are keys,
    and the value for each key is a list of the character codes of the
    letters of the word that is its key."""
[print(ascii(words.index(x))) for x in word in words]
 

Очевидно, что этот код неправильный, но я работал над ним в течение нескольких часов. Я знаю, что кажусь жалким, но в свою защиту скажу, что мой учитель хочет, чтобы я напечатал весь код только в одном понимании списка. Очевидно, она говорит, что для этого упражнения она хочет, чтобы мы использовали PEP8 в качестве руководства. И я знаю, как мне нужно разделить код на несколько строк, чтобы сделать его более читабельным и презентабельным. Это не проблема. Проблема в том, что я почти уверен, что понимание этого списка будет смехотворно длинным. Пожалуйста, пожалуйста, помогите. Я очень благодарен вам за любую помощь, которую вы можете оказать.
Вот как должна работать функция, если она работает правильно:

 words = ['yes', 'no']

codes = get_word_codes(words)

codes {'yes': [121, 101, 115], 'no': [110, 111]}

words = ['hello', 'python', 'bye']

codes = get_word_codes(words)

codes {'hello': [104, 101, 108, 108, 111], 'python': [112, 121, 116, 104, 111, 110], 'bye': [98, 121,
101]}

codes = get_word_codes(['Python is fun!'])

codes {'Python is fun!': [80, 121, 116, 104, 111, 110, 32, 105, 115, 32, 102, 117, 110, 33]}
 

Таким образом, каждое слово в списке превращается в ключ, и каждая буква в каждом слове является значением, но значение должно быть значением ASCII буквы.

Комментарии:

1. Не уверен, что ты пытаешься сделать. Пожалуйста, предоставьте рабочую демонстрацию в нескольких строках, и мы сможем сжать ее оттуда. Включите функцию, ввод и вывод.

2. Итак, вот как должна работать функция, если она работает правильно:слова = [«да», «нет»] > > > > > > коды = get_word_codes(слова) >>>>>>>>>>>>>>> коды {‘да’: [121, 101, 115], ‘нет’: [110, 111]} >>>>>>>>>>>>>>>>>>>>>>>> слова = [«привет», «питон», «пока’] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> коды = get_word_codes(слова) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> коды {‘привет’: [104, 101, 108, 108, 111], ‘python’: [112, 121, 116, 104, 111, 110], ‘пока’: [98, 121, 101]} коды = get_word_codes([‘Python — это весело!’]) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> коды {‘Python — это весело!’: [80, 121, 116, 104, 111, 110, 32, 105, 115, 32, 102, 117, 110, 33]}

3. Пожалуйста, отредактируйте свой первоначальный вопрос. Предыдущий абзац нечитаем. В общем, добавление строк кода в комментарии не работает.

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

Ответ №1:

Вы можете использовать понимание списка для словарей. Повторите свой список, чтобы выделить отдельные слова. Затем используйте понимание списка внутри, чтобы построить список значений ascii ord() .

 def get_word_codes(words):
    """Given a list of words, return a dictionary where the words are keys,
    and the value for each key is a list of the character codes of the
    letters of the word that is its key."""
    return {word:[ord(x) for x in word] for word in words}

print(get_word_codes(["this", "is", "a", "list", "of", "words"]))
 

Выход:

 {'this': [116, 104, 105, 115], 'is': [105, 115], 'a': [97], 'list': [108, 105, 115, 116], 'of': [111, 102], 'words': [119, 111, 114, 100, 115]}
 

Комментарии:

1. Большое вам спасибо! Ух ты! Я должен глубоко изучить, как работает ord ()! Спасибо ВСЕМ, кто откликнулся, но особенно спасибо вам! Вы оба любите то, что делаете, я могу сказать! Я ЛЮБЛЮ программирование, и я так благодарен за помощь людям, которые не смотрят свысока на новичков и отказываются помогать! СПАСИБО ВАМ ОБОИМ!!

2. Наличие легкодоступной функции делает это идеальным вариантом использования для map : return {word:[*map(ord, word)] for word in words}

Ответ №2:

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

 def get_word_codes(words: list) -> dict:
    return dict([(word, [ord(char) for char in word]) 
        for word in words])



if __name__ == "__main__":
    print(get_word_codes(["Hello", "World"]))


 

если вы хотите это понять : мы использовали встроенную функцию pythons ord() , чтобы получить значение ascii символа в строке, создали кортеж, имеющий пару значений ключа в качестве элементов, так что его передача dict создает желаемый дикт.

Комментарии:

1. вывод:{‘Привет’: [72, 101, 108, 108, 111], ‘Мир’: [87, 111, 114, 108, 100]}