如何构造字典以应用枚举

时间:2019-05-07 08:30:50

标签: python dictionary tokenize enumerate

我试图重新构建一个简单的功能,要求输入字典。无论我尝试什么,我都无法找出通过该功能传递的字典的最低限度示例。我读过字典,没有太多空间可以不同地创建它,因此我不知道问题是什么。

我尝试应用以下最小词典示例:

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)

我知道使用 enumerate 基本上是在调用索引和键,所以我不知道如何调用'body',即我要标记化的字符串。

对于使用字符串作为输入的 comments1 comments2 ,我收到错误: TypeError:字符串索引必须为整数

如果我应用整数而不是字符串 comments3 ,则会收到错误消息: TypeError:“ int”对象不可下标

这对您来说似乎微不足道,但是我无法弄清楚自己在做什么错。如果您能提供一个最低限度的工作示例,将不胜感激。

2 个答案:

答案 0 :(得分:1)

为了在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

答案 1 :(得分:0)

您可能正在寻找.items(),例如:

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

这将打印

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

请参见a demo on ideone.com