Избегая повторения эквивалентных строк

#python

Вопрос:

 def tokenized_dataset(self, dataset):
    tokenizer = BertTokenizerFast.from_pretrained("bert-base-uncased")

    print("n" "="*10, "Start Tokenizing", "="*10)
    start = time.process_time()
    train_articles = [self.encode(document, tokenizer) for document in dataset["train"]["article"]]
    test_articles = [self.encode(document, tokenizer) for document in dataset["test"]["article"]]
    val_articles = [self.encode(document, tokenizer) for document in dataset["val"]["article"]]
    train_abstracts = [self.encode(document, tokenizer) for document in dataset["train"]["abstract"]]
    test_abstracts = [self.encode(document, tokenizer) for document in dataset["test"]["abstract"]]
    val_abstracts = [self.encode(document, tokenizer) for document in dataset["val"]["abstract"]]

    print("Time:", time.process_time() - start)
    print("=" * 10, "End Tokenizing", "="*10 "n")

    return {"train": (dataset["train"]["id"], train_articles, train_abstracts),
            "test": (dataset["train"]["id"], test_articles, test_abstracts),
            "val": (dataset["val"]["id"], val_articles, val_abstracts)}
 

У меня есть этот код, и я только что понял, что повторяю код 6 раз или эквивалентно, [self.encode(document, tokenizer) for document in dataset...] т. Е. Есть ли способ изменить блок из 6 эквивалентных строк на что-то более естественное и менее повторяющееся?

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

1. просто создайте функцию, для этого они и предназначены, не так ли?

2. def stuff(x,y): return [self.encode(document, tokenizer) for document in dataset[x][y]]

Ответ №1:

Вы можете легко сделать это с помощью функций python.

 def get_values(x,y):
    return [self.encode(document, tokenizer) for document in dataset[x][y]]