#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]}