Как структурировать словарь, чтобы применить к функции с перечислением - PullRequest
0 голосов
/ 07 мая 2019

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

Я пытался применить следующие минимальные примеры словарей:

import nltk

#Different dictionaries to try as minimum working examples:
comments1 = {1 : 'Rockies', 2: 'Red Sox'}
comments2 = {'key1' : 'Rockies', 'key2': 'Red Sox'}
comments3 = dict([(1, 3), (2, 3)])

#Function:
def tokenize_body(comments):
    tokens = {}
    for idx, com_id in enumerate(comments):
        body = comments[com_id]['body']
        tokenized = [x.lower() for x in nltk.word_tokenize(body)]
        tokens[com_id] = tokenized
    return tokens

tokens = tokenize_body(comments1)

Я знаю, что с перечисление Я в основном вызываю индекс и ключ, я не могу понять, как вызвать 'body', то есть строки, которые я хочу маркировать.

Для обоих comments1 и comments2 со строками в качестве входных данных я получаю сообщение об ошибке: TypeError: строковые индексы должны быть целыми числами .

ЕслиЯ применяю целые числа вместо строк, comments3 , я получаю сообщение об ошибке: TypeError: объект 'int' не может быть подписан .

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

Ответы [ 2 ]

1 голос
/ 07 мая 2019

Чтобы перебрать словарь в python, вам нужно использовать метод items, чтобы получить и ключи, и значения:

comments = {"key1": "word", "key2": "word2"}
def tokenize_body(comments):
    tokens = {}
    for key, value in comments.items():
        # values - word, word2
        # keys - key1, key2
        tokens[key] = [x.lower() for x in nltk.word_tokenize(value)]
    return tokens

enumerate используется для списков, чтобы получить index элемента:

l = ['a', 'b']
for index, elm in enumerate(l):
    print(index) # => 0, 1
0 голосов
/ 07 мая 2019

Возможно, вы ищете .items(), например:

for idx, item in enumerate(comments1.items()):
    print(idx, item)

Это напечатает

0 (1, 'Rockies')
1 (2, 'Red Sox')

См. демо на ideone.com .

...