Python слово в идентификатор представления

Я пытаюсь представить набор слов числами. У меня есть этот код до сих пор:

from sklearn.preprocessing import OneHotEncoder
import itertools
docs = ["select", "max", "income", "from", "data", "where", "revenue", "between", "20", "40"]

# split documents to tokens
tokens_docs = [doc.split(" ") for doc in docs]

# convert list of of token-lists to one flat list of tokens
# and then create a dictionary that maps word to id of word,
# like {A: 1, B: 2} here
all_tokens = itertools.chain.from_iterable(tokens_docs)
word_to_id = {token: idx for idx, token in enumerate(set(all_tokens))}

Однако есть одно ограничение - когда сам токен уже является числом, мне нужно присвоить то же значение, что и число (в словаре word_to_id). Какие-либо предложения?

2 ответа

Решение

Ты можешь использовать if else утверждение внутри словарного понимания.

{token: idx if not token.isdigit() else int(token)
             for idx, token in enumerate(set(all_tokens)}

Это вернется {'4': 4, '5': 5, 'df': 1, 'dfg': 4, 'fd': 0, 'fg': 3}
если вход ['fd', 'df', '5', 'fg', 'dfg', '4']

Вы можете добавить еще одно условие в ваше понимание, и, чтобы сделать его короче, используйте сокращение для if выражение: what_if_True if if_statement what_if_else, Как это:

word_to_id = {token: token if token.isdigit() else idx for idx, token in enumerate(set(all_tokens))}
Другие вопросы по тегам