增加字典中的值
Incrementing a value inside a dictionary
我正在尝试对一袋词建模。当在我的数据(类型系列)中找到该词时,我在字典中增加计数器时遇到了一些问题:
def build_voc(self, data):
for document in data:
for word in document.split(' '):
if word in self.voc:
self.voc_ctr[word] = self.voc_ctr[word] + 1
else:
self.voc.append(word)
self.voc_ctr = 1
我也尝试用这种方式对其进行索引,只是为了测试错误出在哪里:
self.voc_ctr[word][0] = self.voc_ctr[word][0] + 1
但在那一行仍然给我同样的错误:
TypeError: 'int' object is not subscriptable
知道这是同一个class中的函数,其中定义了self.voc和self.voc_ctr:
class BV:
def __init__(self):
self.voc = []
self.voc_ctr = {}
def build_voc(self, data):
for document in data:
for word in document.split(' '):
if word in self.voc:
self.voc_ctr[word] = self.voc_ctr[word] + 1
else:
self.voc.append(word)
self.voc_ctr = 1
错误好像是说self.voc_ctr是一个int对象,但是我定义成list所以不知道哪里错了
def build_voc(self, data):
for document in data:
for word in document.split(' '):
if word in self.voc:
self.voc_ctr[word] = self.voc_ctr[word] + 1
else:
self.voc.append(word)
self.voc_ctr = 1 ## <-------- The function fails here
你的方法不是best/optimal的方法,你不需要先检查列表然后将其添加到字典
字典本身是检查单词是否存在的最好方法
尝试使用修改后的版本
voc_ctr = {}
def build_voc(data):
for document in data:
for word in document.split(' '):
if word in voc:
voc_ctr[word] += 1
else:
voc_ctr = 1
您的代码不会首先进入您的“if”语句,它会进入您的“else”并将您的 self.voc_ctr 初始化为整数 1。
您似乎有更多的事情要做,而不仅仅是一个不工作的计数器。在这部分代码中:
if word in self.voc:
self.voc_ctr[word] = self.voc_ctr[word] + 1
...你说的是“如果这个词在我的列表中,创建一个包含该词的字典条目,并在新条目之后为其分配条目的值。”一旦您更正了最初的 'int' 错误,您将得到一个 KeyError。由于 self.voc_ctr[word] 在赋值操作完成后才会存在,因此 self.voc_ctr[word] + 1 也不存在。
要为每个单词实现一个计数器,请尝试这样做:
if word in self.voc:
self.voc_ctr[word] = 1
else:
self.voc_ctr[word] = 0
我不知道你还需要用这个程序做什么,但这将解决你的反问题。
我正在尝试对一袋词建模。当在我的数据(类型系列)中找到该词时,我在字典中增加计数器时遇到了一些问题:
def build_voc(self, data):
for document in data:
for word in document.split(' '):
if word in self.voc:
self.voc_ctr[word] = self.voc_ctr[word] + 1
else:
self.voc.append(word)
self.voc_ctr = 1
我也尝试用这种方式对其进行索引,只是为了测试错误出在哪里:
self.voc_ctr[word][0] = self.voc_ctr[word][0] + 1
但在那一行仍然给我同样的错误:
TypeError: 'int' object is not subscriptable
知道这是同一个class中的函数,其中定义了self.voc和self.voc_ctr:
class BV:
def __init__(self):
self.voc = []
self.voc_ctr = {}
def build_voc(self, data):
for document in data:
for word in document.split(' '):
if word in self.voc:
self.voc_ctr[word] = self.voc_ctr[word] + 1
else:
self.voc.append(word)
self.voc_ctr = 1
错误好像是说self.voc_ctr是一个int对象,但是我定义成list所以不知道哪里错了
def build_voc(self, data):
for document in data:
for word in document.split(' '):
if word in self.voc:
self.voc_ctr[word] = self.voc_ctr[word] + 1
else:
self.voc.append(word)
self.voc_ctr = 1 ## <-------- The function fails here
你的方法不是best/optimal的方法,你不需要先检查列表然后将其添加到字典
字典本身是检查单词是否存在的最好方法
尝试使用修改后的版本
voc_ctr = {}
def build_voc(data):
for document in data:
for word in document.split(' '):
if word in voc:
voc_ctr[word] += 1
else:
voc_ctr = 1
您的代码不会首先进入您的“if”语句,它会进入您的“else”并将您的 self.voc_ctr 初始化为整数 1。
您似乎有更多的事情要做,而不仅仅是一个不工作的计数器。在这部分代码中:
if word in self.voc:
self.voc_ctr[word] = self.voc_ctr[word] + 1
...你说的是“如果这个词在我的列表中,创建一个包含该词的字典条目,并在新条目之后为其分配条目的值。”一旦您更正了最初的 'int' 错误,您将得到一个 KeyError。由于 self.voc_ctr[word] 在赋值操作完成后才会存在,因此 self.voc_ctr[word] + 1 也不存在。
要为每个单词实现一个计数器,请尝试这样做:
if word in self.voc:
self.voc_ctr[word] = 1
else:
self.voc_ctr[word] = 0
我不知道你还需要用这个程序做什么,但这将解决你的反问题。