我试图重新构建一个简单的功能,要求输入字典。无论我尝试什么,我都无法找出通过该功能传递的字典的最低限度示例。我读过字典,没有太多空间可以不同地创建它,因此我不知道问题是什么。
我尝试应用以下最小词典示例:
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”对象不可下标。
这对您来说似乎微不足道,但是我无法弄清楚自己在做什么错。如果您能提供一个最低限度的工作示例,将不胜感激。
答案 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')