NameError: свободная переменная 'd', на которую ссылается перед присваиванием в окружающей области - PullRequest
1 голос
/ 30 октября 2019

Я новичок в Python и пытаюсь узнать, возможен ли код:

chs = ch.split(' ')
d = { mot:ch.count(mot) for mot in chs if (mot not in d)}

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

Теперь проблема в том, что я получаю эту ошибку

NameError: free variable 'd' referenced before assignment in enclosing scope

, что я полностью понимаю, переменная d еще не установлена.

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

Ответы [ 2 ]

2 голосов
/ 30 октября 2019

Вы можете быть после этого:

ch = 'a a b c d'
words = set(ch.split(' '))

d = { mot:ch.count(mot) for mot in words}
print(d)

Создать set слов. Таким образом, вы проверяете только уникальные слова, по одному разу.

0 голосов
/ 30 октября 2019

Вам не нужно проверять, существует ли вообще mot в d.

ch = 'a a b c d'
chs = ch.split(' ')
d = { mot:ch.count(mot) for mot in chs }

Так что теперь d = {'a': 2, 'b': 1, 'c': 1, 'd': 1}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...